Java 并發包
- 全文内容
-
- 線程池
-
- 好處
- 實作原理
-
- 線程池的主要處理流程
- ThreadPoolExecutor執行示意圖
- 使用
-
- 建立
- 向線程池送出任務
- 關閉
- 合理地配置線程池
- 線程池的監控
- Executor
-
- 架構簡介
-
- 兩級排程模型
- 結構
-
- 類與接口
- 使用示意圖
- 成員
- ThreadPoolExecutor
- ScheduleThreadPoolExecutor
- FutureTask
- 容器和架構
-
- ConcurrentHashMap
- ConcurrentLinkedQueue
- Java中的阻塞隊列
- Fork/Join架構
-
- 是什麼?
- 工作竊取算法
- 異常處理
- 并發工具類
-
- CountDownLatch
-
- 重要方法:
- 為什麼不使用ReentrantLock?
- Semaphore
- CyclicBarrier
-
- 重要方法:
- Phaser
- Exchanger
- 原子操作類
- 引用
你好! 這是我對于Java 并發程式設計相關知識點的梳理與思考,希望對你能有所幫助;菜鳥萌新,問題多多,歡迎指出,謝謝!(全文連結: 點選線上檢視清晰思維導圖.)
本文章以圖為主,如果文章中沒有圖檔,麻煩移步: 連結.
全文内容

線程池
好處
實作原理
線程池的主要處理流程
ThreadPoolExecutor執行示意圖
使用
建立
向線程池送出任務
關閉
合理地配置線程池
線程池的監控
Executor
架構簡介
兩級排程模型
結構
類與接口
使用示意圖
成員
ThreadPoolExecutor
ThreadPoolExecutor執行任務示意圖:
CachedThreadPool的execute()的運作示意
CachedThreadPool的任務傳遞示意圖:
ScheduleThreadPoolExecutor
ScheduledThreadPoolExecutor的任務傳遞示意圖:
ScheduledThreadPoolExecutor的任務執行步驟:
FutureTask
FutureTask的設計示意圖:
FutureTask的級聯喚醒示意圖:
容器和架構
ConcurrentHashMap
ConcurrentLinkedQueue
Java中的阻塞隊列
Fork/Join架構
是什麼?
工作竊取算法
異常處理
并發工具類
CountDownLatch
在完成一組正在其他線程中執行的操作之前,它允許一個或多個線程一直等待。
- 基于AbstractQueuedSynchronizer實作,state初始化為count,每countDown一次減1直到等于0,
- unpark喚醒await線程
重要方法:
- await():調用此方法線程會被阻塞,直到count為0
- await(long timeout, TimeUnit unit):同await(),可以設定最大等待時間,如超過最大等待時間,則不再等待
- countDown():count減1,直至為0
為什麼不使用ReentrantLock?
countDown不需要堵塞,隻需要在最後一次count=0時去喚醒堵塞的主線程(await),AQS+LockSupport完全夠用。
Semaphore
- 計數信号量,用于控制特定資源在同一個時間被通路的個數
- 基于AbstractQueuedSynchronizer實作,支援公平和非公平信号量,預設非公平信号量,state初始化為permits。
CyclicBarrier
- 一個可循環使用(Cyclic)的屏障(Barrier),讓一組線程到達一個屏障(同步點)時被阻塞,直到最後一個線程到達屏障時,屏障才會放行,所有被屏障攔截的線程繼續執行。
- 基于ReentrantLock+Condition實作,await後先lock,然後–count,不等于0就執行Condition.await。反之,重置count并執行Condition.signalAll喚醒所有堵塞線程。
重要方法:
- await():在CyclicBarrier上進行阻塞等待,并使count減1
- await(long timeout, TimeUnit unit):在CyclicBarrier上進行限時的阻塞等待,并使count減1,當時間到達限定時間後,線程繼續執行
- getParties():擷取CyclicBarrier通過屏障的線程數量,也稱為方數
- getNumberWaiting():擷取正在CyclicBarrier上等待的線程數量
Phaser
Exchanger
原子操作類
引用
[1]: 連結: https://mp.weixin.qq.com/s/-PRq4ChaCkEFB_DJyyKhvg
[2]: 《Java并發程式設計的藝術》 方騰飛 魏鵬 程曉明
[3]: 《Java并發程式設計之美》翟陸續,薛賓田