`
zengshaotao
  • 浏览: 755446 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

多线程之 CyclicBarrier

 
阅读更多

package function.thread;

 

import java.util.concurrent.BrokenBarrierException;  

import java.util.concurrent.CyclicBarrier;  

import java.util.concurrent.ExecutorService;  

import java.util.concurrent.Executors;  

  

public class TestCyclicBarrier {  

  

    public static void main(String[] args) {  

      

    //带有一个缓冲的线程池

        ExecutorService exec = Executors.newCachedThreadPool();       

          

        final CyclicBarrier barrier=new CyclicBarrier(4,new Runnable(){  

            @Override  

            public void run() {  

                System.out.println("大家都到齐了,开始开会。。。。。");  

            }});  

          

        for(int i=0;i<4;i++){  

            exec.execute(new Runnable(){  

                @Override  

                public void run() {  

                    try {

                    System.out.println(Thread.currentThread().getName()+" has arrived...");

                    } catch (Exception e) {  

                        e.printStackTrace();  

                    }  

                    try {

                    Thread.sleep(1000);

                    //第一个到达线程不会被计数

                    System.out.println("到目前为止,有"+barrier.getNumberWaiting()+"个等待者。。。。。。");

                        barrier.await();//等待。。。。。

                        

                    } catch (InterruptedException e) {  

                        e.printStackTrace();  

                    } catch (BrokenBarrierException e) {  

                        e.printStackTrace();  

                    }  

                }});  

        }  

        exec.shutdown();  

    }  

  

}

 

运行结果:

pool-1-thread-1 has arrived...

pool-1-thread-2 has arrived...

pool-1-thread-3 has arrived...

pool-1-thread-4 has arrived...

到目前为止,有0个等待者。。。。。。

到目前为止,有1个等待者。。。。。。

到目前为止,有2个等待者。。。。。。

到目前为止,有3个等待者。。。。。。

大家都到齐了,开始happy去

 

分享到:
评论

相关推荐

    java多线程之CyclicBarrier的使用方法

    主要介绍了java多线程之CyclicBarrier的使用方法的相关资料,希望通过本文能帮助到大家,让大家理解掌握这部分内容,需要的朋友可以参考下

    Java多线程开发之CyclicBarrier

    近研究了一个别人的源码,其中用到多个线程并行操作一个文件,并且在所有线程全部结束后才进行主线程后面的处理。  其用到java.util.concurrent.CyclicBarrier 这个类。  CyclicBarrier是一个同步辅助类,它允许...

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

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

    CyclicBarrier实现多个线程相互等待的案例(实现累加操作)

    CyclicBarrier实现多个线程相互等待的案例(实现累加操作)

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

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

    Java多线程之并发工具类

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

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

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

    CyclicBarrier用法.docx

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

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

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

    JUC多线程学习个人笔记

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

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

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

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

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

    详解java多线程的同步控制

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

    JDK自带多线程工具包详解

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

    CountDownLatch 和 CyclicBarrier 的运用(含AQS详解)

    CountDownLatch 和 CyclicBarrier 为线程同步的辅助工具,通过它可以做到使一条线程一直阻塞等待,直到其他线程完成其所处理的任务。

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

    5、"利用CyclicBarrier和CountDownLatch解决并发协调难题,提升多线程程序的执行效率和可控性。#并发工具类 #Java并发编程" 6、"volatile与synchronized的巧妙运用,确保数据可见性,解决并发编程中的常见痛点。#...

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

    CountDownLatch可以实现一个线程等待多个线程、多个线程等待一个线程、多个线程等待多个线程(这里不涉及)。 我们首先来看看怎么实现一个线程等待多个线程吧。 工厂中,对产品需要进行质检,5个工人进行检查,所有...

    多线程下的并发包:这些面试必问的,你都知道吗?

    在JDK的并发包里提供了几个非常有用的并发容器和并发工具类,供我们在多线程开发中进行使用。 并发包的来历: 在实际开发中如果不需要考虑线程安全问题,大家不需要做线程安全,因为如果做了反而性能不好! 但是开发...

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

    【多线程】CyclicBarrier 和 CountDownLatch的不同 88 CountDownLatch 88 CyclicBarrier 89 区别: 89 【多线程】简述synchronized 和java.util.concurrent.locks.Lock的异同? 90 【线程】ThreadLocal的作用 90 ...

    这就是标题—— JUC.pdf

    多线程锁 并发下的集合类 List Set Map Callable接口 线程创建的方式 callable / runnable FutureTask JUC常用辅助类 CountDownLatch (减少计数器) CyclicBarrier(加法计数器) Semaphore(信号量,流量控制) ...

Global site tag (gtag.js) - Google Analytics