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