java多執行緒學習 四

2021-08-19 17:22:22 字數 1841 閱讀 9488

本篇介紹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 ...