1.同步塊 同步塊(synchronized(obj)){ },obj稱之為同步監視器 1.obj可以是任何對象,但是推薦使用共用資源作為同步監視器 2.同步方法中無需指定同步監視器,因為同步方法的同步監視器時this即該對象本身,或class即類的模子 同步監視器執行過程 1.第一個線程訪問,鎖定 ...
1.同步塊
同步塊(synchronized(obj)){ },obj稱之為同步監視器
1.obj可以是任何對象,但是推薦使用共用資源作為同步監視器
2.同步方法中無需指定同步監視器,因為同步方法的同步監視器時this即該對象本身,或class即類的模子
同步監視器執行過程
1.第一個線程訪問,鎖定同步監視器,執行其中代碼
2.第二個線程訪問,發現同步監視器被鎖定,無法訪問
3.第一個線程訪問完畢,解鎖同步監視器
4.第二個線程訪問,發現同步監視器未鎖,訪問並鎖定
註:java中四大塊:局部塊,構造塊,靜態塊,同步塊。
例
例:
2.併發容器
3.死鎖
多個線程各自占有一些共用資源,並且互相等待其他線程占有的資源才能進行,
而導致兩個或者多個線程都在等待對方釋放資源,都停止執行的情形。某一個同步塊同時擁有
"兩個以上對象的鎖"時,就可能會發生死鎖的問題
例: