1. 程式人生 > >從零開始學多執行緒之構建快(四)

從零開始學多執行緒之構建快(四)

 public static void main(String [] args) throws BrokenBarrierException, InterruptedException {
        //建構函式傳了兩個引數,第一個是等待的執行緒數,第二個是當所有執行緒到達關卡點統一執行的任務
        CyclicBarrier cyclicBarrier = new CyclicBarrier(3, new Runnable() {
            @Override
            public void run() {
                System.out.println(
"嘿,還真一起執行了"); } }); //設定三個執行緒,每個阻塞不同的時間. new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(2000); cyclicBarrier.await(); System.out.println("是否一起執行"); }
catch (InterruptedException e) { e.printStackTrace(); } catch (BrokenBarrierException e) { e.printStackTrace(); } } }).start(); new Thread(new Runnable() { @Override public void
run() { try { cyclicBarrier.await(); System.out.println("是否一起執行"); } catch (InterruptedException e) { e.printStackTrace(); } catch (BrokenBarrierException e) { e.printStackTrace(); } } }).start(); new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(3000); cyclicBarrier.await(); System.out.println("是否一起執行"); } catch (InterruptedException e) { e.printStackTrace(); } catch (BrokenBarrierException e) { e.printStackTrace(); } } }).start(); /*下面注掉的這些的程式碼證明關卡可以重複使用. Thread.sleep(1000); Long startTime = System.nanoTime(); new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(5000); Long endTime = System.nanoTime() - startTime; System.out.println("測試阻塞"+endTime); cyclicBarrier.await(); System.out.println("是否一起執行"); } catch (InterruptedException e) { e.printStackTrace(); } catch (BrokenBarrierException e) { e.printStackTrace(); } } }).start(); new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(2000); cyclicBarrier.await(); System.out.println("是否一起執行"); } catch (InterruptedException e) { e.printStackTrace(); } catch (BrokenBarrierException e) { e.printStackTrace(); } } }).start(); new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(1000); cyclicBarrier.await(); System.out.println("是否一起執行"); } catch (InterruptedException e) { e.printStackTrace(); } catch (BrokenBarrierException e) { e.printStackTrace(); } } }).start(); */ }