`

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.util.concurrent.CyclicBarrier 这个类。  CyclicBarrier是一个同步辅助类,它允许...

    Java多线程之并发工具类

     1)CountDownLatch(同步倒数计数器:等待多线程(或者多步骤)完成)  2)CyclicBarrier(循环屏障:同步屏障)  3)Semaphore(信号量:控制并发进程数)  主要参考资料:java并发编程的艺术、Java并发——...

    Java多线程下的其他组件之CyclicBarrier、Callable、Future和FutureTask详解

    主要介绍了Java多线程下的其他组件之CyclicBarrier、Callable、Future和FutureTask详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    个人总结的深入java多线程开发

    看完《think in java》多线程章节,自己写的多线程文档,还结合了其他的相关网络资料。 线程 一. 线程池 1)为什么要使用线程池 2 2)一个具有线程池的工作队列 3 3)使用线程池的风险: 4 4)有效使用线程池的原则 5...

    java多线程开发之通过对战游戏学习CyclicBarrier

    给大家分享了关于java多线程开发中通过对战游戏学习CyclicBarrier的相关知识点内容,有兴趣的朋友们学习参考下。

    JAVA 多线程之信号量(Semaphore)实例详解

    主要介绍了JAVA 多线程之信号量(Semaphore)实例详解的相关资料,需要的朋友可以参考下

    详解java多线程的同步控制

    目录线程安全 Thread Safety重入锁 ReentrantLock读写锁 ReadWriteLock倒计数器 CountDownLatch循环栅栏 CyclicBarrier信号量 Semaphore 线程安全 Thread Safety JMM JMM(Java Memory Model)是一种基于计算机内存...

    【2018最新最详细】并发多线程教程

    【2018最新最详细】并发多线程教程,课程结构如下 1.并发编程的优缺点 2.线程的状态转换以及基本操作 3.java内存模型以及happens-before规则 4.彻底理解synchronized 5.彻底理解volatile 6.你以为你真的了解final吗...

    CyclicBarrier用法.docx

    CyclicBarrier是Java中的一个同步工具类,用于协调多个线程之间的同步。它的作用类似于CountDownLatch,可以让一个或多个线程等待其他线程执行完毕后再继续执行。 CyclicBarrier可以被看作是一个屏障,当所有线程都...

    上海某大厂java面试真题与解析

    #Java多线程 #面试真题" 3、"深入理解线程池工作原理,掌握Executor框架下四种线程池的创建与应用,有效提升系统资源利用率。#Java线程池 #性能优化" 4、"线程状态流转图解析,从New到Runnable,再到Running,直至...

    JUC多线程学习个人笔记

    JUC(Java Util Concurrent)是Java中用于并发编程的工具包,提供了一组接口和类,用于处理多线程和并发操作。JUC提供了一些常用的并发编程模式和工具,如线程池、并发集合、原子操作等。 JUC的主要特点包括: ...

    Java面试题+Java并发编程(J.U.C)+Java8实战+Redis+kafka

    『死磕Java并发编程系列』 01 十张图告诉你多线程那些破事 『死磕Java并发编程系列』 02 面试官:说说什么是Java内存模型? 『死磕Java并发编程系列』 03 面试必问的CAS原理你会了吗? 『死磕Java并发编程系列』 04 ...

    多线程控制的三大安全类封装

    多线程控制的三大安全类:CountDownLatch、CyclicBarrier、Semaphore,这工具包将其封装,可以让初学者更容易学习以及让开发者更容易调用,不需要自己重新编写核心代码。具体事例在源码中。

    Java并发编程一CountDownLatch、CyclicBarrier、Semaphore初使用

    Java并发之AQS详解 CountDownLatch CountDownLatch可以实现一个线程等待多个线程、多个线程等待一个线程、多个线程等待多个线程(这里不涉及)。 我们首先来看看怎么实现一个线程等待多个线程吧。 工厂中,对产品...

    java线程并发semaphore类示例

    Java 5.0里新加了4个协调线程间进程的同步装置,它们分别是Semaphore, CountDownLatch, CyclicBarrier和Exchanger,本例主要介绍Semaphore,Semaphore是用来管理一个资源池的工具,可以看成是个通行证

    【Java入门知识图谱】帮助Java初学者成长

    【对线面试官】多线程基础 【对线面试官】 CAS 【对线面试官】同步进行 【对线面试官】AQS&&ReentrantLock 【对线面试官】线程池 【对线面试官】ThreadLocal 【对线面试官】CountDownLatch和CyclicBarrier 【对线...

    java jdk实列宝典 光盘源代码

    一个支持多线程的服务器框架,GeneralServer.java; 代理服务器,ProxyServer.java; telnet客户端,访问系统的telnet服务实质上是与telnet服务建立socket连接,默认的telnet服务的端口是23,TelnetClient.java; ...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    【多线程】简述synchronized 和java.util.concurrent.locks.Lock的异同? 90 【线程】ThreadLocal的作用 90 【Spring】什么是IOC和DI?DI是如何实现的 91 【Spring】spring中的IOC(控制反转)的原理 92 【Spring】...

    JDK自带多线程工具包详解

    由浅入深,通过图解和手写代码,讲解Java版的多线程,主要讲解如下内容: CPU运转机制 线程运行原理及线程状态 AQS原理&源码解读 线程同步+各种锁的原理&手写实现 JDK多线程工具包中,若干种工具的原理和手写实现: ...

Global site tag (gtag.js) - Google Analytics