看下图,体会一下处理流程上的不同。
package demo.thread;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
public class ThreadMain {
public static void main(String[] args) throws Exception {
CyclicBarrier barrier = new CyclicBarrier(3, new TotalTask());
BillTask worker1 = new BillTask("111", barrier);
BillTask worker2 = new BillTask("222", barrier);
BillTask worker3 = new BillTask("333", barrier);
worker1.start();
worker2.start();
worker3.start();
System.out.println("Main thread end!");
}
static class TotalTask extends Thread {
public void run() {
System.out.println("所有子任务都执行完了,就开始执行主任务了.");
}
}
static class BillTask extends Thread {
private String billName;
private CyclicBarrier barrier;
public BillTask(String workerName, CyclicBarrier barrier) {
this.billName = workerName;
this.barrier = barrier;
}
public void run() {
try {
System.out.println("市区: " + billName + "运算开始: ");
Thread.sleep(1000L);
System.out.println("市区: " + billName + "运算完成,等待中。。。");
try {
barrier.await();
} catch (BrokenBarrierException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("全部都结束, 市区 " + billName + "才开始后面的工作。");
} catch(InterruptedException e) {
e.printStackTrace();
}
}
}
}
市区: 111运算开始:
市区: 333运算开始:
Main thread end!
市区: 222运算开始:
市区: 222运算完成,等待中。。。
市区: 111运算完成,等待中。。。
市区: 333运算完成,等待中。。。
所有子任务都执行完了,就开始执行主任务了.
全部都结束, 市区 222才开始后面的工作。
全部都结束, 市区 111才开始后面的工作。
全部都结束, 市区 333才开始后面的工作。