Java併發程式設計的藝術 讀書筆記第九章

2021-09-14 00:50:41 字數 1206 閱讀 1495

合理地使用執行緒池能夠帶來3個好處

第一:降低資源消耗。通過重複利用已建立的執行緒降低執行緒建立和銷毀造成的消耗。

第二:提高響應速度。當任務到達時,任務可以不需要等到執行緒建立就能立即執行。

第三:提高執行緒的可管理性。執行緒是稀缺資源,如果無限制地建立,不僅會消耗系統資源,

還會降低系統的穩定性,使用執行緒池可以進行統一分配、調優和監控。

程池的實現原理

執行緒池判斷核心執行緒池裡的執行緒是否都在執行任務。如果不是,則建立乙個新的工作執行緒來執行任務。如果核心執行緒池裡的執行緒都在執行任務,則進入下個流程。

執行緒池判斷工作佇列是否已經滿。如果工作佇列沒有滿,則將新提交的任務儲存在這個工作佇列裡。如果工作佇列滿了,則進入下個流程。

執行緒池判斷執行緒池的執行緒是否都處於工作狀態。如果沒有,則建立乙個新的工作執行緒來執行任務。如果已經滿了,則交給飽和策略來處理這個任務

corepoolsize(執行緒池的基本大小)

runnabletaskqueue(任務佇列):

arrayblockingqueue:是乙個基於陣列結構的有界阻塞佇列,此佇列按fifo(先進先出)原則對元素進行排序。

·linkedblockingqueue:乙個基於鍊錶結構的阻塞佇列,此佇列按fifo排序元素,吞吐量通常要高於arrayblockingqueue。靜態工廠方法executors.newfixedthreadpool()使用了這個佇列。

·synchronousqueue:乙個不儲存元素的阻塞佇列。每個插入操作必須等到另乙個執行緒呼叫移除操作,否則插入操作一直處於阻塞狀態,吞吐量通常要高於linked-blockingqueue,靜態工廠方法executors.newcachedthreadpool使用了這個佇列。

·priorityblockingqueue:乙個具有優先順序的無限阻塞佇列。

3)maximumpoolsize(執行緒池最大數量)

4)threadfactory:

5)rejectedexecutionhandler(飽和策略)

execute()方法用於提交不需要返回值的任務。

submit()方法用於提交需要返回值的任務。

java併發程式設計的藝術 讀書筆記 01

1.1.1 多執行緒一定快嗎?下面 並行一定比序列執行的快嗎?public class concurrencytest private static void concurrency throws interruptedexception 啟動執行緒 thread.start int b 0 for...

讀書筆記 java併發程式設計的藝術3 4章

可見性 對乙個volatile變數的讀,總是能看到 任意執行緒 對這個volatile變數最後的寫入。原子性 如果是多個volatile操作或類似於volatile 這種復合操作,整體上不具有原子性 當第二個操作是volatile寫時,不管第乙個操作是什麼,都不能重排序。這個規則確保volatile...

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

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