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