本篇介紹synchronized(非this物件x)方式的同步,x一般是引數或者例項變數
package chapter2.synblockstring3;
/*演示不同執行緒持有不同的物件監視器,呼叫是非同步的
* ta的物件監視器是anystring,而b的物件監視器是類例項物件
a begin
b begin
b end
a end
*/public class run
}package chapter2.synblockstring3;
public class service
}catch(interruptedexception e)
} synchronized public void b()
}package chapter2.synblockstring3;
public class threada extends thread
@override
public void run()
}package chapter2.synblockstring3;
public class threadb extends thread
@override
public void run()
}
1,當多個物件同時執行synchronized(x){}同步**塊時呈同步效果
2,當其他物件執行x物件的synchronized方法時呈現同步效果,但如果其他執行緒呼叫x物件的非synchronized方法還是非同步的
3,當其他物件執行x物件裡的synchronized(this)**塊時也是同步的
前兩條結論比較明顯,僅僅驗證第三條結論:
package chapter2.test3;
public class myobject }}
package chapter2.test3;
/*演示當使用syn(obj)方式時,其他程序進入obj的syn(this)**塊是同步的,因為syn(this)也是對obj例項加鎖
* 也就是b執行緒需要等待a執行緒執行完syn(obj),釋放obj的鎖,才能獲得obj的鎖,
testmethod1 _____get locked time=1525528023801run threadname=a
testmethod1 _____release locked time=1525528025801run threadname=a
speedprintstring __get locked time=1525528025801run thread name=b
------------------
speedprintstring ___release locked time=1525528025802run thread name=b
*/public class run
}package chapter2.test3;
public class service catch(interruptedexception e)
} }}package chapter2.test3;
public class threada extends thread
@override
public void run()
}package chapter2.test3;
public class threadb extends thread
@override
public void run()
}
參考:
java多執行緒學習四 後台執行緒
package myk 使用thread建立的執行緒預設情況下是前台執行緒,在程序中,只要有乙個前台執行緒未退出,程序就不會終止。主線程就是乙個前台執行緒。而後台執行緒不管執行緒是否結束,只要所有的前台執行緒都退出 包括正常退出和異常退出 後,程序就會自動終止。一般後台執行緒用於處理時間較短的任務,...
JAVA多執行緒 四
size x large 死鎖 size size medium 1 何為死鎖 size 簡單說來,死鎖就是系統中的執行緒因相互等侍彼此占有的資源而暫停執行,造成系統假死的現象。size medium 2 死鎖是如何發生的 size 假設系統有兩個互斥資源a和b,系統中的兩個執行緒1和2都要獲得a和...
多執行緒學習(四)
boost shared mutex 這個配合boost shared lock類這個相當於讀鎖 巢狀鎖不是乙個很好的選擇,盡量嘗試更改資料結構 條件和期望 執行緒會等待乙個特定事件的發生,或者等待某一條件達成。這可能定期檢查任務完成。需要進行同步,可以利用期望和條件達成同步。例子如下 class ...