1.物件鎖
public class demo3 implements runnable
system.out.println("finished");
} @override
public void run()
public synchronized void method() catch (interruptedexception e)
system.out.println(thread.currentthread().getname()+"已經執行結束");
} }}
執行結果:
現在是物件方法鎖的形式:thread-0
thread-0已經執行結束
現在是物件方法鎖的形式:thread-1
thread-1已經執行結束
finished
public class demo2 implements runnable
system.out.println("finished");
} @override
public void run() catch (interruptedexception e)
system.out.println(thread.currentthread().getname()+"已經執行結束");
} }}
public class demo2 implements runnable
system.out.println("finished");
} @override
public void run() catch (interruptedexception e)
system.out.println(thread.currentthread().getname()+"object1已經執行結束");
} synchronized(object1) catch (interruptedexception e)
system.out.println(thread.currentthread().getname()+"object2已經執行結束");
}}}
兩個同步**塊鎖定是同乙個例項,執行結果;
現在是object1:thread-0
thread-0object1已經執行結束
現在是object1:thread-1
thread-1object1已經執行結束
現在是object2:thread-1
thread-1object2已經執行結束
現在是object2:thread-0
thread-0object2已經執行結束
finished
public class demo2 implements runnable
system.out.println("finished");
} @override
public void run() catch (interruptedexception e)
system.out.println(thread.currentthread().getname()+"object1已經執行結束");
} synchronized(object2) catch (interruptedexception e)
system.out.println(thread.currentthread().getname()+"object2已經執行結束");
}}}
兩個同步**塊鎖定是不同例項,執行結果:
現在是object1:thread-0
thread-0object1已經執行結束
現在是object1:thread-1
現在是object2:thread-0
thread-0object2已經執行結束
thread-1object1已經執行結束
現在是object2:thread-1
thread-1object2已經執行結束
finished
總結:**塊形式:手動指定鎖物件
方發鎖形式:synchronized修飾普通方法,鎖物件預設為this.
2.類鎖概念
兩種形式
synchronized修飾靜態的方法
public class demo4 implements runnable
system.out.println("finished");
} @override
public void run()
public **static** synchronized void method() catch (interruptedexception e)
system.out.println(thread.currentthread().getname()+"已經執行結束");
} }
執行結果:
現在是物件方法鎖的形式:thread-0
thread-0已經執行結束
現在是物件方法鎖的形式:thread-1
thread-1已經執行結束
finished
2. 指定鎖為class物件
public class demo5 implements runnable
system.out.println("finished");
} @override
public void run()
private void method() catch (interruptedexception e)
system.out.println(thread.currentthread().getname()+"已經執行結束");}}
}
執行結果:
thread-0已經執行結束
現在是物件方法鎖的形式:thread-1
thread-1已經執行結束
finished
mysql的兩種引擎 mysql的兩種儲存引擎
背景 最近在使用spring data jpa操作mysql,在使用jpa的自動建表功能之後,處理多對多關係 manytomany的時候,spring data jpa會給中間表的兩個欄位都加上外來鍵引用。當前使用的版本預設的資料庫儲存引擎為myisam。這種儲存引擎是為資料庫查詢效能而生的,不支援...
Divide Two Integers 的兩種解法
divide two integers without using multiplication,division and mod operator.if it is overflow,return max int.解題思路 1.通過被除數減去除數來得到被除數中包含多少個除數,一直減到被除數小於等於...
MyBatis collection的兩種形式
與association一樣,collection元素也有兩種形式,現介紹如下 一 巢狀的resultmap 查詢教師及其指導的學生的資訊。由於教師 學生都有 id name gender等屬性,因此給教師的字段都起了別名 select t.id t id,t.name t name,t.gende...