柵欄(CyclicBarrier)初嘗試
阿新 • • 發佈:2019-02-17
以下是柵欄的一個簡單例子:
package JavaDay6_02; import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; /** * @author [email protected] * @date 18-6-2 上午10:33 */ public class Demo4 { public static class Writer extends Thread { private final CyclicBarrier cyclicBarrier; public Writer(CyclicBarrier cyclicBarrier) { this.cyclicBarrier = cyclicBarrier; } @Override public void run() { try{ Thread.sleep(1000); System.out.println("執行緒" + this.getName() + "寫入資料完畢,等待其他執行緒寫入..."); cyclicBarrier.await(); System.out.println("執行緒" + this.getName() + "關閉"); } catch (InterruptedException e) { e.printStackTrace(); } catch (BrokenBarrierException e) { e.printStackTrace(); } } } public static void main(String[] args) throws BrokenBarrierException, InterruptedException { CyclicBarrier cyclicBarrier = new CyclicBarrier(5); for(int i = 0; i < 4 ; i++) { new Writer(cyclicBarrier).start(); } cyclicBarrier.await(); Thread.sleep(1000); System.out.println("所有執行緒寫入資料完畢..."); } }
執行結果為: