我們一起聊聊并發編程:同步工具類
一、Semaphore
Semaphore也就是信號量,提供了資源數量的并發訪問控制。
使用場景:大學生到自習室搶座,寫作業。
二、CountDownLatch
假設一個主線程要等待5個 Worker 線程執行完才能退出,可以使用CountDownLatch來實現。
三、CyclicBarrier
該類用于協調多個線程同步執行操作的場合。
使用場景:10個工程師一起來公司應聘,招聘方式分為筆試和面試。首先,要等人到齊后,開始筆 試;筆試結束之后,再一起參加面試。
四、Exchanger
Exchanger用于線程之間交換數據。
五、Phaser
用Phaser替代CyclicBarrier和CountDownLatch。
從JDK7開始,新增了一個同步工具類Phaser,其功能比CyclicBarrier和CountDownLatch更加強大。
特性1:動態調整線程個數
CyclicBarrier 所要同步的線程個數是在構造方法中指定的,之后不能更改,而 Phaser 可以在運行 期間動態地調整要同步的線程個數。
特性2:層次Phaser
多個Phaser可以組成如下圖所示的樹狀結構