1. 程式人生 > >執行緒十九:Phaser

執行緒十九:Phaser

Phaser構建了一個更加靈活的同步屏障,和前面文章中提到的CountDownLatch與CyclicBarrier屏障器一樣,Phaser也能使得一組執行緒在屏障上等待,在最後一條執行緒到達之後,這些執行緒就能繼續執行了。Phaser的靈活在於它可以協調不定數目的執行緒,執行緒可以在任何時刻加入。

為了達到靈活性的目的,Phaser定義了表達狀態的phase值,phase的初始值是0,當執行緒都到達指定的屏障點時,它的值就會自動加1.我們可以靈活使用這個值來做多個執行緒的分階段任務的互動。在實際程式設計的時候我們通常會重寫一個方法:onAdvance(int phase,int registeredParties),當phase值發生變化時這個方法會自動呼叫,當它返回true時,Phaser就結束了。

為了演示Phaser的靈活應用,我們模擬一個多階段屏障點的程式,假設有3個工程師同時來公司面試,面試一共有2輪,分別是筆試和麵試,只有他們都到齊了才能開始筆試,只有筆試都結束了才能開始面試。我們看一下這個例項的實現程式碼:

參考連結