CyclicBarrier 是一個同步輔助類,它允許一組線程相互等待,直到所有線程都到達某個柵欄狀態再同時執行。CyclicBarrier 可以用于多線程計算數據,最后合并計算結果的場景。
CyclicBarrier 可以理解為一個計數器,通過構造函數指定計數器的初始值,每個線程在到達柵欄時通過調用 await() 方法將自己計數,計數器的值減1,直到所有線程都到達柵欄,計數器的值為0,此時所有線程同時被釋放,并且柵欄被重置,可以重新使用。
CyclicBarrier 的主要方法包括:
await(): 在柵欄上等待,直到所有線程都到達柵欄。每個線程調用該方法都會導致計數器減1,當計數器減到0時,所有線程同時被釋放。
await(long timeout, TimeUnit unit): 在指定的超時時間內等待,如果超過指定時間仍然有線程未到達柵欄,則拋出 TimeoutException 異常。
CyclicBarrier 的使用步驟如下:
創建 CyclicBarrier 實例,指定計數器的初始值和到達柵欄時要執行的動作。
在每個線程中,調用 await() 方法等待其他線程到達柵欄。
當所有線程都到達柵欄后,執行指定的動作。
重復使用 CyclicBarrier,可以通過重新創建一個新的實例來實現。