背景
多线程同时准备好之后同时执行任务
关键方法
我们用CyclicBarrier来让线程进入等待就绪的状态,一旦这些线程准备就绪,就可以让这10个线程跑起来。
代码示例
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
public class CyclicBarrierExample {
private static class Task implements Runnable {
private CyclicBarrier barrier;
public Task(CyclicBarrier barrier) {
this.barrier = barrier;
}
@Override
public void run() {
try {
System.out.println(Thread.currentThread().getName() + " 准备就绪");
barrier.await();
System.out.println(Thread.currentThread().getName() + " 起跑");
} catch (InterruptedException ex) {
} catch (BrokenBarrierException ex) {
}
}
}
public static void main(String args[]) {
final CyclicBarrier cb = new CyclicBarrier(10, new Runnable(){
@Override
public void run(){
//一旦所有线程准备就绪,这个动作就执行
System.out.println("准备就绪,开始!");
}
});
for(int i = 1;i<=10;i++) {
Thread sporter= new Thread(new Task(cb) ,i+"号赛道");
sporter.start();
}
}
}