java 线程 障碍器
package de.bvb; import java.util.concurrent.CyclicBarrier; import java.util.concurrent.TimeUnit; /** * java 线程 障碍器 * * Java5中,添加了障碍器类,为了适应一种新的设计需求, * 比如一个大型的任务,常常需要分配好多子任务去执行,只有当所有子任务都执行完成时候 * ,才能执行主任务,这时候,就可以选择障碍器了。 * */ public class Test4 { public static void main(String[] args) { final int subTaskCounts = 5; Thread mainTask = new Thread(new MainTask()); // 不能调用start方法,障碍器中会自动调用start方法,否则主任务可能会立即执行 // mainTask.start(); CyclicBarrier cyclicBarrier = new CyclicBarrier(subTaskCounts, mainTask); for (int i = 0; i < subTaskCounts; i++) { Thread subTask = new Thread(new SubTask("任务" + i, cyclicBarrier)); subTask.start(); } } } class SubTask implements Runnable { private String taskName; private CyclicBarrier cyclicBarrier; public SubTask(String taskName, CyclicBarrier cyclicBarrier) { super(); this.taskName = taskName; this.cyclicBarrier = cyclicBarrier; } @Override public void run() { try { System.out.println(taskName + "开始执行任务..."); TimeUnit.SECONDS.sleep(2);// 模拟耗时任务 System.out.println(taskName + "已经执行完了,并通知障碍器已经完成"); cyclicBarrier.await();// 通知障碍器已经完成 } catch (Exception e) { e.printStackTrace(); } } } class MainTask implements Runnable { @Override public void run() { System.out.println("主任务最后执行...."); } }
程序执行结果: