concurrent programming in java design principles and patterns 學習記錄。
Using Concurrency Constructs:
使用synchronized的一般規則:
- 更新對象自身的屬性時,總是加鎖。
- 訪問可能被改變的對象屬性時,總是加鎖。
- 當調用其他對象的方法時,從不加鎖。
使線程結束的方法有很多種:
- 最簡單的方法時讓run方法正常運行結束.
- 但是對於有無盡循環邏輯的線程來說,最好的選擇是使用Thread.interreupt,這樣線程即可從Object.wait(),Thread.join()和Thread.sleep()中退出,調用者可以捕獲中斷異常,進行合適的處理。
新開啓的線程不持有開啓者線程所持有的任何鎖。
在自己的線程中不要讓自己join,如此自己會等待自己執行完再繼續執行,這樣程序將無法退出。
默認每個線程的優先級與開啓它的線程相同,主線程默認的優先級爲5(優先級1-10).線程可以在自己的線程運行中設置自己的優先級。設置的優先級可以影響到本程序與其他程序在同一臺計算機上的調度。
主線程被繼承的優先級只能是5(主線程可以設置自己的優先級爲其他值,但是主線程創建的其他線程默認繼承的值是5,可以顯示設置開啓的線程的優先級,其他線程設置自己的優先級可以被其開啓的線程繼承)
Thread類還支持的控制方法有:suspend、resume、stop和destroy。suspend、resume和stop被棄用了,stop在發行版java中沒被實現,可能永遠也不會實現。suspend和resume的效果可以用waiting和notification來實現。
suspend、resume、stop與destroy已經全部棄用了,但是destroy也是實現了的。
Thread的yield方法建議先執行其他的線程,yield方法的作用取決於虛擬機的解釋,因此yield的作用並不能獲得保證。