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






































