36套java进阶高级架构师视频+38套大数据视频 保证全是硬货需要的
+微信:
du13797566440
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* CyclicBarrier(谁个白若儿)使用
* CycicBarrier对象可以同时唤醒多个被CycicBarrier对象停止的线程
*/
public class worker implements Runnable {
private CyclicBarrier cyclicBarrier;
private int id;
/*
* cyclicBarrier:多个线程公用一个cyclicBarrier
* i:线程id
*/
public worker(CyclicBarrier cyclicBarrier, int id) {
this.cyclicBarrier=cyclicBarrier;
this.id=id;
}
public void run() {
System.out.println(id+"线程准备2s");//每个线程准备两秒
try {
/* Thread.sleep(2000);*/
cyclicBarrier.await();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
System.out.println(id+"线程开始"); //3个线程都准备完毕后,才会执行这里
}
public static void main(String[] args) {
CyclicBarrier cyclicBarrier= new CyclicBarrier(3);//只要累计调用await的线程达到3个时,三个线程都同时被唤醒,否则都还处于等待中
worker w1=new worker(cyclicBarrier,1);
worker w2=new worker(cyclicBarrier,2);
worker w3=new worker(cyclicBarrier,3);
ExecutorService newFixedThreadPool = Executors.newFixedThreadPool(3);//固定创建3个线程的线程池
newFixedThreadPool.submit(new Thread(w1));
newFixedThreadPool.submit(new Thread(w2));
newFixedThreadPool.submit(new Thread(w3));
newFixedThreadPool.shutdown();//线程池不关闭程序不会停止
}
}
---------------------------------------------
1线程准备2s
3线程准备2s
2线程准备2s
2线程开始
1线程开始
3线程开始