本文目錄一覽:
java為什麼要對對象加鎖
對象是一個鎖標誌。按照先到先得的原則,如果有多個線程都會執行代碼,並使用同一個對象作為鎖,
synchronize(對象){
….
}
那麼,先執行這段代碼的那個線程,將會獲得這個對象鎖,而當這個線程執行這段代碼的時候,其他線程也是使用這個對象作為鎖的,就不能執行這段代碼,知道最初得到這個鎖的線程運行完這段代碼,然後再把鎖分配給下一個線程執行。
關於JAVA里的加鎖synchronized
1.凡使用synchronized標記的方法,比如 public synchronized void func1() { …. },則同時只有一個線程能夠運行這個方法。比如,線程1正在運行func1,則其他線程需要運行func1的話,會卡住,等線程1運行func1結束後,其他線程中,才會有一個幸運兒成功爭取到運行func1的資格,然後這個幸運兒線程開始運行func1。沒有爭取到運行資格的其他線程,會繼續等待。
2.你的例子中,被鎖定的是 方法 m1,而不是屬性b。所以,m1的synchronized加鎖操作,與b沒有半點毛錢關係。
3.要實現你的鎖b想法,其實很簡單。去買一件貞操寶甲來就行了。開玩笑,哈哈。要鎖b,把main方法里的tt.m2()修改為tt.m1()。
4.以後別用“b”作為變量,總覺得怪怪了。也許你現在還沒長大,很單純。但大人的世界裡,“b”是一種不文雅但又對人類的未來有重要作用的東西。建議用cb來代替b。
java代碼右下角加鎖能運行嗎為什麼
能。java代碼右下角加鎖能運行,是因為多線程共享的代碼區域需要上鎖,防止多線程同時訪問代碼塊,造成線程安全問題。
原創文章,作者:YKNIG,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/313461.html