欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > java >内容正文

java

Java线程详解(18)-障碍器

发布时间:2025/3/21 java 34 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Java线程详解(18)-障碍器 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

Java5中,添加了障碍器类,为了适应一种新的设计需求,比如一个大型的任务,常常需要分配好多子任务去执行,只有当所有子任务都执行完成时候,才能执行主任务,这时候,就可以选择障碍器了。

        障碍器是多线程并发控制的一种手段,用法很简单。下面给个例子:

import java.util.concurrent.BrokenBarrierException;   import java.util.concurrent.CyclicBarrier;  /** * Java线程:新特征-障碍器 */   public class Test {  public static void main(String[] args){  //创建障碍器,并设置MainTask为所有定数量的线程都达到障碍点时候所要执行的任务(Runnable)  CyclicBarrier cb = new CyclicBarrier(7,new MainTask());  new SubTask("A", cb).start();  new SubTask("B", cb).start();  new SubTask("C", cb).start();  new SubTask("D", cb).start();  new SubTask("E", cb).start();  new SubTask("F", cb).start();  new SubTask("G", cb).start();  }   }   //主任务   class MainTask implements Runnable {  public void run() {  System.out.println(">>>>主任务执行了!<<<<");  }   }   //子任务   class SubTask extends Thread {  private String name;  private CyclicBarrier cb;  SubTask(String name, CyclicBarrier cb) {  this.name = name;  this.cb = cb;  }  public void run(){  System.out.println("[子任务"+name+"]开始执行了!");  for(int i=0;i<999999;i++);//模拟耗时的任务  System.out.println("[子任务" + name +"]开始执行完成了,并通知障碍器已经完成!");  try {  //通知障碍器已经完成  cb.await();  } catch(InterruptedException e) {  e.printStackTrace();  } catch(BrokenBarrierException e) {  e.printStackTrace();  }  }   }  


        执行结果:

[子任务B]开始执行了!   [子任务A]开始执行了!   [子任务D]开始执行了!   [子任务A]开始执行完成了,并通知障碍器已经完成!   [子任务D]开始执行完成了,并通知障碍器已经完成!   [子任务C]开始执行了!   [子任务C]开始执行完成了,并通知障碍器已经完成!   [子任务F]开始执行了!   [子任务B]开始执行完成了,并通知障碍器已经完成!   [子任务E]开始执行了!   [子任务F]开始执行完成了,并通知障碍器已经完成!   [子任务G]开始执行了!   [子任务E]开始执行完成了,并通知障碍器已经完成!   [子任务G]开始执行完成了,并通知障碍器已经完成!   >>>>主任务执行了!<<<<  


        从执行结果可以看出,所有子任务完成的时候,主任务执行了,达到了控制的目标。
 

总结

以上是生活随笔为你收集整理的Java线程详解(18)-障碍器的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。