Java 讀書筆記 21 4 併發

2021-07-28 15:06:17 字數 2013 閱讀 6862

相關參考

2.2 在任務阻塞時終結

sleep()方法將執行緒由執行狀態變為阻塞狀態

執行緒狀態:

新建(new):當執行緒被建立時,執行緒會短暫地處於這種狀態。此時,執行緒已經被分配了必需的系統資源,並執行了初始化。此時執行緒已經有資格獲得cpu的時間,此時只是有能力去爭取cpu的時間。之後 ,排程器將把這個執行緒轉變為可就緒或者阻塞狀態

就緒(runnable):在這種狀態下,執行緒排程器只要將時間片分配給執行緒,執行緒就可以執行。在任意的時刻,執行緒可以執行也可以不執行,就看排程器是否分配時間片

阻塞(blocked):執行緒能夠執行,但某個條件阻礙了執行。當乙個執行緒t處於阻塞狀態下,排程器就會忽略執行緒,不會再分配給t任何的cpu時間。只有當t重新進入就緒狀態,t才有可能被分給cpu時間片,才可能執行操作

死亡(dead):處於死亡或者終止狀態的執行緒將不再擁有是可排程的。並且也不可能再有資格去得到cpu時間片,執行緒的任務已經結束。任務死亡的通常做法就是run()執行結束返回

進入阻塞狀態的可能原因:

呼叫了sleep()方法,任務進入休眠。此時,執行緒在指定的時間內不會執行

呼叫了wait()方法使執行緒掛起。直到執行緒得到notify(),notifyall(),執行緒才會進入就緒狀態

執行緒在等個某個輸入輸出完成

執行緒試圖在某個物件上呼叫其同步方法,但此時物件鎖被另乙個執行緒持有不可用

對於處於阻塞狀態的執行緒,必須強制這個執行緒跳出阻塞狀態後,才可以讓執行緒主動地終止

其實這一節重點是執行緒生命週期,至於終結本身,只是兩個方法,和如何終結而已;

thread.interrupt(); 進行中斷

thread.interrupted() 用以檢查中斷

到重點了啦 ,書上的例子除了太長以外,都是經典啊;

一輛車要先打蠟,再拋光;

這裡就存在一步要等另外一步,一輛車每兩個執行緒;拋光需要等待打蠟;,打蠟結束後,打蠟需要叫醒拋光的人;

public

class

waxomatic

}class car

/*** 拋光完成

*/public

synchronized

void

buffed()

/*** 正在拋光,等待著準備打蠟

*@throws interruptedexception

*/public

synchronized

void

waitforwaxing() throws interruptedexception

}/**

* 正在打蠟,等待著準備拋光

*@throws interruptedexception

*/public

synchronized

void

waitforbuffing() throws interruptedexception

}}class waxon implements runnable

@override

public

void

run()

}catch (interruptedexception e)

system.out.println("完成打蠟");

}}class waxoff implements runnable

@override

public

void

run()

}catch (interruptedexception e)

system.out.println("完成拋光");

}}

notify()用於喚醒特定的任務;有乙個鎖,很多任務在等它,那麼你就可以使用notify()來特定喚醒

notifyall()喚醒乙個鎖下面的全部任務;

Java併發 JAVA併發程式設計實戰 讀書筆記3

發布乙個物件的意思是使它能夠被當前範圍之外的 所使用。比如將乙個引用儲存到其他 可以訪問的地方,在乙個非私有的方法中返回這個引用。在很多情況下,我們需要確保物件及它們的內部狀態不被暴露。乙個物件在尚未準備好時就將它發布,稱作逸出。最常見的發布物件的方式就是將物件的引用儲存到公共靜態域中,任何類和執行...

Java併發 JAVA併發程式設計實戰 讀書筆記8

為計算結果建立高效 可伸縮的快取記憶體 public inte ce computable public class expensivefunction implements computable public class memoizer1implements computable public ...

Java併發 JAVA併發程式設計實戰 讀書筆記14

無論何時,執行緒池需要建立乙個執行緒都要通過乙個執行緒工廠。public inte ce threadfactory 預設的執行緒工廠建立乙個新的非守護的執行緒,其中的newthread 會在建立乙個新執行緒時被呼叫。public class mythreadfactory implements t...