excutor框架
excutor框架將任務的提交和執行分離開,任務提交會遍布到程式的各個地方,但執行策略的設定可以在乙個地方,如用執行緒池執行還是序列執行,執行緒池固定長度還是變長,所有顯示地使用new thread(task)的地方都應該考慮下excutor框架
攜帶結果的任務callable和future
執行緒執行任務的構建有三種方法,1. 繼承thread。2. 實現runnable介面。3. 實現callable介面。callable的抽象能有乙個返回值表示任務的結果,在excutor裡提交callable任務,可以返回future物件,future物件包裝了整個任務的生命週期,可以獲取返回值。
任務執行異常
future的get獲取callable執行結果,會丟擲in'te'rru'p'tedexception,excutionexception,can'ce'lationexception,timeoutexception
當任務中有異常丟擲的時候,呼叫future的get獲取結果的時候,會丟擲excuteexception,可以呼叫e.getcause獲取真正的異常。
completionservice
如果有多個並行任務,在獲取結果的時候乙個個呼叫對應的future的get,如果需要先完成的先處理,則這種方式無法做到。可以使用completionservice,內部會關聯乙個excutor用來提交任務,呼叫completionservice的take方法來返回已完成任務的future結構
為任務設定時限
future的get方法可以設定timeout,還可以呼叫cancel方法(一般在timeout後會呼叫cancel方法)
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...