多线程并发工具 CyclicBarrier
作用:计数器可循环使用,并且可以设置计数到期执行某个方法
**************************
相关类
public class CyclicBarrier {
********
构造函数
public CyclicBarrier(int parties)
public CyclicBarrier(int parties, Runnable barrierAction)
********
常用方法
public int await() throws InterruptedException, BrokenBarrierException
public int await(long timeout, TimeUnit unit) throws InterruptedException, BrokenBarrierException, TimeoutException
*************************
示例
class Thread12 implements Runnable{
private CyclicBarrier cyclicBarrier;
Thread12(CyclicBarrier cyclicBarrier){
this.cyclicBarrier=cyclicBarrier;
}
@Override
public void run() {
try{
System.out.println(Thread.currentThread().getName()+"开始运行");
Thread.sleep(1000);
cyclicBarrier.await();
System.out.println(Thread.currentThread().getName()+"运行结束");
}catch (Exception e){
e.printStackTrace();
}
}
}
class Task implements Runnable{
@Override
public void run() {
try{
System.out.println();
System.out.println("task 开始运行");
Thread.sleep(1000);
System.out.println("task 运行结束");
System.out.println();
}catch (Exception e){
e.printStackTrace();
}
}
}
public class ThreadTest12 {
public static void main(String[] args){
Task task=new Task();
CyclicBarrier cyclicBarrier=new CyclicBarrier(5,task);
Thread12 t=new Thread12(cyclicBarrier);
for(int i=0;i<5;i++){
Thread thread=new Thread(t,"线程"+i);
thread.start();
}
}
}
*******************
控制台输出
线程1开始运行
线程3开始运行
线程0开始运行
线程4开始运行
线程2开始运行
task开始运行
task 运行结束
线程2运行结束
线程3运行结束
线程4运行结束
线程0运行结束
线程1运行结束