`
jokermanager
  • 浏览: 143846 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JDK5新特性--java.util.concurrent CyclicBarrier(3)

阅读更多

实际应用中,有时候需要多个线程同时工作以完成同一件事情,而且在完成过程中,往往会等待其他线程都完成某一阶段后再执行,等所有线程都到达某一个阶段后再统一执行。

比如有几个旅行团需要途经深圳、广州、韶关、长沙最后到达武汉。旅行团中有自驾游的,有徒步的,有乘坐旅游大巴的;这些旅行团同时出发,并且每到一个目的地,都要等待其他旅行团到达此地后再同时出发,直到都到达终点站武汉。

这时候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 } ;
   // 旅游大巴
   private static  int []  timeBus =  2 4 6 6 } ;
  
   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 Shenzhen
00:02:25: BusTour Reached Shenzhen
00:02:27: WalkTour Reached Shenzhen
00:02:30: SelfTour Reached Guangzhou
00:02:31: BusTour Reached Guangzhou
00:02:35: WalkTour Reached Guangzhou
00:02:39: SelfTour Reached Shaoguan
00:02:41: BusTour Reached Shaoguan

分享到:
评论

相关推荐

    backport-util-concurrent(2.2 /3.1)

    backport-util-concurrent库,正如其名,是一种将Java 5及以上版本的并发特性“回移植”到Java 1.4及更早版本的工具,使得开发者能在较旧的Java环境中享受现代并发编程的优势。本文将深入探讨这个库的2.2和3.1两个...

    java-jdk1.6-jdk-6u45-windows-x64.zip

    4. 并发工具:提供了一些新的并发工具类,如`java.util.concurrent`包下的`CountDownLatch`、`CyclicBarrier`和`Phaser`,这些工具帮助开发者更高效地管理多线程程序。 5. JDBC增强:JDBC API进行了扩展,增加了对...

    backport-util-concurrent-3.1.jar和geronimo-stax-api_1.0_spec-1.0.1.jar

    "backport-util-concurrent-3.1.jar"是Java.util.concurrent包的回移植版本,主要用于Java 5之前的JRE环境。它提供了与Java 5及更高版本相同的并发工具类,如线程池、Future、CyclicBarrier等。这些工具可以提高多...

    jdk-6u45-linux-x64.bin

    5. **并发工具类库**:Java并发工具包(java.util.concurrent)在1.6版本中得到加强,增加了如`CountDownLatch`、`CyclicBarrier`、`Semaphore`等同步工具,便于多线程编程。 6. **XPath和XML处理**:JDK 1.6改进了...

    jdk----5windowsx64.zip

    9. **并发编程改进(Concurrency Enhancements)**:引入了`java.util.concurrent`包,包含了许多线程安全的数据结构和并发工具类,如`Executor`框架、`Future`接口以及`Semaphore`、`CyclicBarrier`等同步工具。...

    backport-util-concurrent_java_backport_源码.zip

    这个库使得开发者在不支持Java 5新特性的环境中也能使用高级的并发控制机制,极大地提升了多线程编程的效率和可靠性。本文将深入探讨backport-util-concurrent的源码,揭示其核心设计理念与实现原理。 首先,...

    jdk-7u17-windows-x64.zip

    6. **并发改进**:对java.util.concurrent包进行了优化,包括改进的并发工具类,如CountDownLatch和CyclicBarrier,以及更高效的并发数据结构。 7. **编码改进**:增加了对编码格式的支持,比如对汉字和其他多字节...

    A-JUC-JVM-Java并发知识..pdf

    Java并发编程包(java.util.concurrent,简称JUC)封装了大量用于高并发编程的工具类和接口,其中涉及了线程池、阻塞队列、同步器、原子操作类等。在并发环境下,可以有效降低线程创建和管理的复杂性。 #### Java...

    jdk-6u45-windows-x64

    JDK 1.6,也被称为Java SE 6,是Java平台标准版的一个重大更新,它在Java 1.5的基础上引入了许多新特性和改进。以下是一些关键知识点: 1. **增强的Swing组件**:JDK 1.6对Swing组件进行了优化,提供了更好的外观和...

    JDK_API_1_6_zh_CN_downcc.com.zip

    - **java.concurrent**包引入了线程池、Future、Callable、CyclicBarrier等高级并发工具,提高了多线程编程的效率和可管理性。 3. **泛型**: JDK 1.5引入了泛型,允许在类、接口和方法中使用类型参数,提高了...

    j2sdk-1_4_1_02-windows-i586.rar

    5. **并发工具(Concurrent Utilities)**:在java.util.concurrent包中添加了一系列的线程安全的集合和并发工具类,如Executor框架、Semaphore、CyclicBarrier等,为多线程编程提供了更好的支持。 6. **JMX(Java ...

    jdk-7-i586

    7. **并发工具升级**:并发包`java.util.concurrent`中的工具类如CountDownLatch、CyclicBarrier等得到了增强,提升了多线程编程的效率。 8. **动态语言支持**:JDK 7引入了 invokedynamic 指令,为运行时绑定方法...

    Beginning.Java.2,.JDK.5.Edition

    《初识Java 2:JDK 5版》是一本专为Java初学者设计的教程,旨在引导读者深入了解Java编程语言及其JDK 5版本的新特性。这本书详细讲解了Java的基础概念、语法以及开发环境的搭建,对于想要踏入Java世界的人来说,是不...

    java的concurrent用法详解

    随着Java 1.5的发布,Sun公司(现在是Oracle公司的一部分)引入了`java.util.concurrent`包,这是一个革命性的进步,极大地简化了并发编程的工作,并增强了程序的稳定性和效率。通过`java.util.concurrent`提供的...

    jdk1.6 和jdk1.8中文api

    - **并发改进**:包括`java.util.concurrent`包中的新工具,如线程池、Future接口和CyclicBarrier,提升了多线程编程的效率和可管理性。 - **动态代理**:通过`java.lang.reflect.Proxy`类,开发者可以创建动态...

    jdk 1.8 api中文版和英文版

    - 泛型是JDK 5引入的新特性,用于在编译时检查类型安全,减少类型转换的必要。 5. **Lambda表达式** - JDK 1.8引入的重要特性,简化了函数式接口的使用,使得代码更简洁、易读。 6. **Optional类** - 为了解决...

    jdk api 1.8 最新版(中文版)

    `java.util.concurrent`包中的Semaphore、CountDownLatch、CyclicBarrier等工具类,以及`java.lang.invoke.MethodHandles`和`java.lang.invoke.MethodHandle`,增强了并发编程的能力。 **八、 Nashorn JavaScript...

    Java API 文档 jdk api 1.8-google

    12. **并发工具类**:java.util.concurrent包中包含了许多高级并发工具,如ExecutorService、CountDownLatch、CyclicBarrier等,帮助开发者编写高效、线程安全的代码。 通过阅读和理解这个Java API文档,开发者可以...

    java1.8 jdk1.8中文帮助文档.chm api下载

    3. **并发编程**:Java 1.8在`java.util.concurrent`包中提供了丰富的并发工具类,如`ExecutorService`、`Future`、`Semaphore`、`CyclicBarrier`等,以及`Fork/Join`框架,帮助开发者编写高效、安全的并发代码。...

    [Java参考文档].JDK_API中文版

    11. **并发工具**:`java.util.concurrent`包提供了高级并发工具,如`Semaphore`,`CountDownLatch`,`CyclicBarrier`,`ThreadPoolExecutor`等,用于更有效和安全的多线程编程。 12. **国际化(i18n)**:`java....

Global site tag (gtag.js) - Google Analytics