`

Java多线程之CyclicBarrier

 
阅读更多

Java多线程之CyclicBarrier

 

  1. import  java.util.Random;  
  2. import  java.util.concurrent.CyclicBarrier;  
  3.   
  4. /**  
  5.  * CyclicBarrier类似于CountDownLatch也是个计数器,  
  6.  * 不同的是CyclicBarrier数的是调用了CyclicBarrier.await()进入等待的线程数,  
  7.  * 当线程数达到了CyclicBarrier初始时规定的数目时,所有进入等待状态的线程被唤醒并继续。  
  8.  * CyclicBarrier就象它名字的意思一样,可看成是个障碍,  
  9.  * 所有的线程必须到齐后才能一起通过这个障碍。  
  10.  * CyclicBarrier初始时还可带一个Runnable的参数,  
  11.  * 此Runnable任务在CyclicBarrier的数目达到后,所有其它线程被唤醒前被执行。  
  12.  */   
  13. public   class  CyclicBarrierTest {  
  14.   
  15.     public   static   class  ComponentThread  implements  Runnable {  
  16.         CyclicBarrier barrier;// 计数器   
  17.         int  ID;  // 组件标识   
  18.         int [] array;     // 数据数组   
  19.   
  20.         // 构造方法   
  21.         public  ComponentThread(CyclicBarrier barrier,  int [] array,  int  ID) {  
  22.             this .barrier = barrier;  
  23.             this .ID = ID;  
  24.             this .array = array;  
  25.         }  
  26.   
  27.         public   void  run() {  
  28.             try  {  
  29.                 array[ID] = new  Random().nextInt( 100 );  
  30.                 System.out.println("Component "  + ID +  " generates: "  + array[ID]);  
  31.                 // 在这里等待Barrier处   
  32.                 System.out.println("Component "  + ID +  " sleep..." );  
  33.                 barrier.await();  
  34.                 System.out.println("Component "  + ID +  " awaked..." );  
  35.                 // 计算数据数组中的当前值和后续值   
  36.                 int  result = array[ID] + array[ID +  1 ];  
  37.                 System.out.println("Component "  + ID +  " result: "  + result);  
  38.             } catch  (Exception ex) {  
  39.             }  
  40.         }  
  41.     }  
  42.     /**  
  43.      * 测试CyclicBarrier的用法  
  44.      */   
  45.     public   static   void  testCyclicBarrier() {  
  46.         final   int [] array =  new   int [ 3 ];  
  47.         CyclicBarrier barrier = new  CyclicBarrier( 2 new  Runnable() {  
  48.             // 在所有线程都到达Barrier时执行   
  49.             public   void  run() {  
  50.                 System.out.println("testCyclicBarrier run..." );  
  51.                 array[2 ] = array[ 0 ] + array[ 1 ];  
  52.             }  
  53.         });  
  54.   
  55.         // 启动线程   
  56.         new  Thread( new  ComponentThread(barrier, array,  0 )).start();  
  57.         new  Thread( new  ComponentThread(barrier, array,  1 )).start();  
  58.     }  
  59.   
  60.     public   static   void  main(String[] args) {  
  61.         CyclicBarrierTest.testCyclicBarrier();  
  62.     }  

分享到:
评论

相关推荐

    java多线程之CyclicBarrier的使用方法

    Java多线程之CyclicBarrier的使用方法 Java多线程之CyclicBarrier的使用方法是Java多线程编程中的一种同步机制,用于实现多个线程之间的同步协作。CyclicBarrier是Java 5中引入的一种同步机制,用于让多个线程等待...

    汪文君JAVA多线程编程实战(完整不加密)

    《汪文君JAVA多线程编程实战》是一本专注于Java多线程编程的实战教程,由知名讲师汪文君倾力打造。这本书旨在帮助Java开发者深入理解和熟练掌握多线程编程技术,提升软件开发的效率和质量。在Java平台中,多线程是...

    java多线程进度条

    本主题将深入探讨如何在Java多线程环境下实现进度条功能。 首先,理解Java多线程的基本概念至关重要。Java通过Thread类和Runnable接口来支持多线程。创建一个新线程通常有两种方式:继承Thread类并重写run()方法,...

    JAVAJAVA多线程教学演示系统论文

    《JAVA多线程教学演示系统》是一篇深入探讨JAVA多线程编程的论文,它针对教育领域中的教学需求,提供了一种生动、直观的演示方式,帮助学生更好地理解和掌握多线程技术。这篇论文的核心内容可能包括以下几个方面: ...

    Java多线程编程核心技术_完整版_java_

    Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要通过继承Thread类或实现Runnable接口来实现。本教程《Java多线程编程核心技术》将...

    Java多线程编程实战指南-核心篇

    《Java多线程编程实战指南-核心篇》是一本深入探讨Java并发编程的书籍,旨在帮助读者掌握在Java环境中创建、管理和同步线程的核心技术。Java的多线程能力是其强大之处,使得开发者能够在同一时间执行多个任务,提高...

    Java多线程设计模式_清晰完整PDF版 Java多线程设计模式源代码

    总之,Java多线程设计模式是每个Java开发者必备的技能之一。深入学习并熟练运用这些模式,将有助于你编写出更高效、稳定和易于扩展的多线程应用程序。这个PDF版教程和源代码集合是你学习多线程设计模式的理想资源,...

    Java多线程编程

    Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要通过`Thread`类和并发工具来实现,接下来我们将深入探讨这些关键知识点。 1. **...

    java多线程设计

    本知识点将深入探讨Java多线程设计以及如何利用“不可变对象”(immutable objects)来避免多线程环境中的非安全问题。 一、Java多线程基础 1. 线程的创建:Java提供了两种创建线程的方式——继承Thread类和实现...

    Java多线程端口快速扫描

    Java多线程端口扫描是网络管理与安全领域中常用的一种技术,主要用于检测网络设备上哪些端口处于开放状态,从而分析网络的安全性或者优化网络配置。本程序通过利用Java的多线程特性,提高了扫描速度,使得在短时间内...

    java多线程示例

    在Java编程语言中,多线程是核心特性之一,它允许程序同时执行多个任务,从而提高了应用程序的效率和响应...文档“java多线程实例.docx”可能包含具体的示例代码和详细解释,建议参考学习,以加深对Java多线程的理解。

    java多线程之并发锁

    Java 多线程之并发锁 Java 中的多线程编程是指在一个程序中同时运行多个线程,以提高程序的执行效率和响应速度。在多线程编程中,线程间的同步是非常重要的,因为不同的线程可能会同时访问同一个共享资源,导致数据...

    Java多线程之龟兔赛跑

    在这个"Java多线程之龟兔赛跑"的例子中,我们看到了如何使用Java的Thread类来创建和管理线程,模拟经典的寓言故事——龟兔赛跑。 首先,我们创建了一个名为`WuguiThread`的类,它继承自`Thread`。这个类代表乌龟...

    java多线程进阶

    Java多线程是Java编程中的核心概念,尤其对于高级开发者来说,掌握多线程的深入理解和应用至关重要。这本书“java多线程进阶”显然旨在帮助读者深化这方面的理解,打通编程中的“任督二脉”,使开发者能够更加熟练地...

    java多线程小汽车运行程序

    Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在这个名为"java多线程小汽车运行程序"的项目中,我们可以看到一个利用Java实现的多线程应用程序,可能是模拟汽车...

    java多线程编程

    Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要通过继承Thread类或实现Runnable接口来实现。本教程将深入探讨Java多线程的各个方面...

    深入学习:Java多线程编程

    《深入学习:Java多线程编程》是一本专注于Java并发技术的专业书籍,旨在帮助开发者深入理解和熟练运用Java中的多线程编程。Java多线程是Java编程中的核心部分,尤其在现代高性能应用和分布式系统中不可或缺。理解并...

    Java多线程资料

    Java多线程是Java编程中的核心概念,它允许程序同时执行多个任务,提高了软件的效率和响应性。在Java中,多线程的实现主要有两种方式:通过继承Thread类和实现Runnable接口。这篇资料深入探讨了Java多线程的相关知识...

    Java 模拟线程并发

    最后,Java并发库还包含了很多其他有用的工具,如Semaphore(信号量)用于控制同时访问特定资源的线程数量,CyclicBarrier(循环屏障)和CountDownLatch(计数器门锁)用于多线程间的协作,以及Lock接口及其实现如...

Global site tag (gtag.js) - Google Analytics