本站首页    管理页面    写新日志    退出


«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告
本博客在此声明所有文章均为转摘,只做资料收集使用。并无其他商业用途。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:210
评论数量:205
留言数量:-19
访问次数:918244
建立时间:2007年5月10日




[J2SE相关]JDK1.5新特性--java.util.concurrent CyclicBarrier(2)
文章收藏,  网上资源,  软件技术,  电脑与网络

李小白 发表于 2007/7/18 17:06:59

lhwork 发表于 2006-12-11 11:15:57 在实际应用中,有时候需要多个线程同时工作以完成同一件事情,而且在完成过程中,往往会等待其他线程都完成某一阶段后再执行,等所有线程都到达某一个阶段后再统一执行。 比如有几个旅行团需要途经深圳、广州、韶关、长沙最后到达武汉。旅行团中有自驾游的,有徒步的,有乘坐旅游大巴的;这些旅行团同时出发,并且每到一个目的地,都要等待其他旅行团到达此地后再同时出发,直到都到达终点站武汉。 这时候CyclicBarrier就可以派上用场。CyclicBarrier最重要的属性就是参与者个数,另外最要方法是await()。当所有线程都调用了await()后,就表示这些线程都可以继续执行,否则就会等待。 package concurrent;import java.text.SimpleDateFormat;import java.util.Date;import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CyclicBarrier;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class TestCyclicBarrier {  // 徒步需要的时间: Shenzhen, Guangzhou, Shaoguan, Changsha, Wuhan  private static int[] timeWalk = { 5, 8, 15, 15, 10 };  // 自驾游  private static int[] timeSelf = { 1, 3, 4, 4, 5 };  // 旅游大巴  private static int[] timeBus = { 2, 4, 6, 6, 7 };    static String now() {    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");    return sdf.format(new Date()) + ": ";  }  static class Tour implements Runnable {    private int[] times;    private CyclicBarrier barrier;    private String tourName;    public Tour(CyclicBarrier barrier, String tourName, int[] times) {      this.times = times;      this.tourName = tourName;      this.barrier = barrier;    }    public void run() {      try {        Thread.sleep(times[0] * 1000);        System.out.println(now() + tourName + " Reached Shenzhen");        barrier.await();        Thread.sleep(times[1] * 1000);        System.out.println(now() + tourName + " Reached Guangzhou");        barrier.await();        Thread.sleep(times[2] * 1000);        System.out.println(now() + tourName + " Reached Shaoguan");        barrier.await();        Thread.sleep(times[3] * 1000);        System.out.println(now() + tourName + " Reached Changsha");        barrier.await();        Thread.sleep(times[4] * 1000);        System.out.println(now() + tourName + " Reached Wuhan");        barrier.await();      } catch (InterruptedException e) {      } catch (BrokenBarrierException e) {      }    }  }  public static void main(String[] args) {    // 三个旅行团    CyclicBarrier barrier = new CyclicBarrier(3);    ExecutorService exec = Executors.newFixedThreadPool(3);    exec.submit(new Tour(barrier, "WalkTour", timeWalk));    exec.submit(new Tour(barrier, "SelfTour", timeSelf));    exec.submit(new Tour(barrier, "BusTour", timeBus));    exec.shutdown();  }} 运行结果:00:02:25: SelfTour Reached Shenzhen00:02:25: BusTour Reached Shenzhen00:02:27: WalkTour Reached Shenzhen00:02:30: SelfTour Reached Guangzhou00:02:31: BusTour Reached Guangzhou00:02:35: WalkTour Reached Guangzhou00:02:39: SelfTour Reached Shaoguan00:02:41: BusTour Reached Shaoguan


阅读全文(1673) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.257 second(s), page refreshed 144765555 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号