文章徹底是按照本身的理解寫的,若是有什麼不對的地方,請指正....java
CyclicBarrier能夠讓幾個線程準備好,等所有線程準備好了,再一塊兒執行。舉個例子,張3、李4、王五約好一塊兒吃飯,只有三我的到期了纔開始吃,這個例子自認爲舉得不錯,給本身一點掌聲,下面請看代碼ide
package com.lujiawei.thread; import java.util.concurrent.CyclicBarrier; /** * CyclicBarrier用法 * @author jiawei * @version V1.0 * @date 2017年4月9日上午1:11:07 */ public class CyclicBarrierTest { public static void main(String[] args) { //初始化一個CyclicBarrier,後面3表示須要三個線程準備好了才能進行一塊兒執行 CyclicBarrier cyclicBarrier = new CyclicBarrier(3); Thread zhangsan = new Thread(new Runnable() { @Override public void run() { try { System.out.println("張三準備到了,準備吃飯...."); cyclicBarrier.await(); //等待其餘線程準備好 System.out.println("張三開吃"); } catch (Exception e) { e.printStackTrace(); } } }); Thread lisi = new Thread(new Runnable() { @Override public void run() { try { System.out.println("李四到了,準備吃飯...."); cyclicBarrier.await(); //等待其餘線程準備好 System.out.println("李四開吃"); } catch (Exception e) { e.printStackTrace(); } } }); Thread wangwu = new Thread(new Runnable() { @Override public void run() { try { System.out.println("王五到了,準備吃飯...."); cyclicBarrier.await(); System.out.println("王五開吃"); } catch (Exception e) { e.printStackTrace(); } } }); zhangsan.start(); lisi.start(); wangwu.start(); } }
看下打印的結果線程
李四到了,準備吃飯.... 王五到了,準備吃飯.... 張三準備到了,準備吃飯.... 張三開吃 王五開吃 李四開吃