文章完全是按照自己的理解写的,如果有什么不对的地方,请指正....
CyclicBarrier可以让几个线程准备好,等全部线程准备好了,再一起执行。举个例子,张三、李四、王五约好一起吃饭,只有三个人到期了才开始吃,这个例子自认为举得不错,给自己一点掌声,下面请看代码
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();
}
}
看下打印的结果
李四到了,准备吃饭....
王五到了,准备吃饭....
张三准备到了,准备吃饭....
张三开吃
王五开吃
李四开吃