CyclicBarrier---可重用的循环栅栏】的更多相关文章

很多文章只是提了下可重用,具体这个栅栏怎么可重用的,很多没有说明,这里会解开你的疑惑. CyclicBarrier是一个同步工具类,它允许一组线程互相等待,直到达到某个公共屏障点.与CountDownLatch不同的是该barrier在释放线程等待后可以重用,所以它称为循环(Cyclic)的屏障(Barrier). CyclicBarrier支持一个可选的Runnable命令,在一组线程中的最后一个线程到达之后(但在释放所有线程之前),该命令只在每个屏障点运行一次.若再继续所有的参与线程之前更新…
CyclicBarrier官方文档 一.原理 CyclicBarrier是另外一种多线程并发控制实用工具.它和CountDownLatch非常类似,它也可以实现线程的计数等待,但它的功能比CountDownLatch更加复杂且强大. CyclicBarrier可以理解为循环栅栏.栅栏就是一种障碍物,比如私人住宅围上一圈栅栏可以阻止闲杂人进入.它是用来阻止线程继续执行,要求线程在栅栏处等待.前面Cyclic意为循环,也就是说这个计数器可以反复使用. 二.API 三.Demo 四.CyclicBar…
1.倒计时器CountDownLatch CountDownLatch是一个多线程控制工具类.通常用来控制线程等待,它可以让一个线程一直等待知道计时结束才开始执行 构造函数: public CountDownLatch(int count) //count 计数个数 例如:在主线程中启动10个子线程去数据库中获取分页数据,需要等到所有线程数据都返回之后统一做统计处理 public class CountDownLatchDemo implements Runnable{ private stat…
CyclicBarrier是JDK 1.5 concurrent包出现的一个用于解决多条线程阻塞,当达到一定条件时一起放行的一个类.我们先来看这样一个简单的需求. 现在我有一个写入数据的类,继承Runable接口: public class WriteDateThread implements Runnable { @Override public void run() { System.out.println(Thread.currentThread().getName() + "开始写入数据…
昨天我们学习了倒计数功能的等待,今天我们学习的是循环栅栏:CyclicBarrier.下面我们就开始吧: 1.CyclicBarrier简介CyclicBarrier,是JDK1.5的java.util.concurrent并发包中提供的一个并发工具类.所谓Cyclic即 循环 的意思,所谓Barrier即 屏障 的意思.所以综合起来,CyclicBarrier指的就是 循环屏障,虽然这个叫法很奇怪,但是确能很好地表示它的作用.其作用在JDK注释中是这样描述的: 翻译过来,如下: CyclicB…
可以理解为循环栅栏,栅栏就是一种障碍物.假如我们将计数器设置为10,那么凑齐第一批10个线程后,计数器就会归零,然后接着凑齐下一批10个线程,这就是循环栅栏的含义. 构造器: public CyclicBarrier(int parties, Runnable barrierAction) parties:计数总数,也就是参与的线程总数. barrierAction 当计数器一次完成计数后,系统会执行的动作   下面代码展示了 司令要求10个士兵去完成任务,先集合10个然后去一起完成任务,等全部…
package 第三章.循环栅栏CyclicBarrier; import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CyclicBarrier; /** * Created by zzq on 2018/1/24. */public class CyclicBarrierTeST implements Runnable{ static CyclicBarrier cyclicBarrier=n…
简介 java.util.concurrent包是Java 5的一个重大改进,java.util.concurrent包提供了多种线程间同步和通信的机制,比如Executors, Queues, Timing, Synchronizers和Concurrent Collections等.与synchronized关键字和Object.notify()等方法相比,这些类和方法的抽象层次都较高.Effective Java中提到,其中比较重要的同步和通信机制有Executor框架.Concurren…
这是java高并发系列第17篇. 本文主要内容: 介绍CyclicBarrier 6个示例介绍CyclicBarrier的使用 对比CyclicBarrier和CountDownLatch CyclicBarrier简介 CyclicBarrier通常称为循环屏障.它和CountDownLatch很相似,都可以使线程先等待然后再执行.不过CountDownLatch是使一批线程等待另一批线程执行完后再执行:而CyclicBarrier只是使等待的线程达到一定数目后再让它们继续执行.故而Cycli…
import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; /** * CyclicBarrier可看成是个障碍, 所有的线程必须到齐后才能一起通过这个障碍.  */ public class CyclicBarrierDemo extends Thread { private CyclicBarrier cyclicBarrier; public CyclicBar…
CyclicBarrier是一种类似于栅栏的存在,意思就是在栅栏开放之前你都只能被挡在栅栏的一侧,当栅栏移除之后,之前被挡在一侧的多个对象则同时开始动起来. 1. 如何使用CyclicBarrier   在介绍其原理之前,先了解一下CyclicBarrier应该如何使用.   假设现在有这样的场景,我们需要开一个会议,需要张1.张2.张3三个人参加, 会议需要三个人都到齐之后才能开始,否则只能干等着:这个场景用CyclicBarrier可以很契合的模拟出来.代码如下: public static…
CyclicBarrier介绍一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point).在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用.因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier.CyclicBarrier 支持一个可选的 Runnable 命令,在一组线程中的最后一个线程到达之后(但在释放所有线程之前),该命令只在每个屏障点运行一次.若在继续所有…
简介 CyclicBarrier 是一个同步辅助工具,允许一组线程全部等待彼此达到共同屏障点,且等待的线程被释放后还可以重新使用,所以叫做Cyclic(循环的). 应用场景 比如出去旅行时,导游需要等待所有的客人到齐后,导游才会给大家讲解注意事项等 官方示例 在JDK的源码注释中,提供了一个简单的示例demo,稍加修改后就可以运行 public class Solver { AtomicInteger sum = new AtomicInteger(0); // 自己新增的一个标识,true代表…
import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; import java.util.concurrent.TimeUnit; public class TestCyclicBarrier { public static class Soldier implements Runnable { private String soldier; private fi…
CyclicBarrier public class CyclicBarrierDemo { public static void main(String[] args) { CyclicBarrier cyclicBarrier = new CyclicBarrier(7,()->{ System.out.println("集齐7颗龙珠召唤神龙"); }); for (int i =1; i <=7 ; i++) { new Thread(()->{ try { S…
Java多线程下循环计数器 本文主要内容:CyclicBarrier(下文中凯哥就用cycBar来代替)定义介绍:举例说明:代码演示:从源码来看原理及总结:CyclicBarrier与CountDownLatch(下文就用CountDown来代替)比较. 本篇是<凯哥(凯哥Java:kagejava)并发编程学习>系列之<并发工具类>教程的第二篇:<Java多线程下循环计数器>. 编辑 一:CyclicBarrier是什么 cycBar是什么呢? 来看看JDKAPI文档…
package com.thread.test.thread; import java.util.Random; import java.util.concurrent.*; /** * CyclicBarrier * 同步工具:允许一组线程共同等待一个壁垒点 * 适用于固定数量线程的同步 * 等待线程释放后可以重复使用 * * Created by windwant on 2016/5/27. */ public class MyCyclicBarrier { public static vo…
CyclicBarrier 翻译过来叫循环栅栏.循环障碍什么的(还是有点别扭的.所以还是别翻译了,只可意会不可言传啊).它主要的方法就是一个:await().await() 方法没被调用一次,计数便会减少1,并阻塞住当前线程.当计数减至0时,阻塞解除,所有在此 CyclicBarrier 上面阻塞的线程开始运行.在这之后,如果再次调用 await() 方法,计数就又会变成 N-1,新一轮重新开始,这便是 Cyclic 的含义所在. CyclicBarrier 的使用并不难,但需要主要它所相关的异…
CountDownLatch 是能使一组线程等另一组线程都跑完了再继续跑:CyclicBarrier 能够使一组线程在一个时间点上达到同步,可以是一起开始执行全部任务或者一部分任务. CountDownLatch.CyclicBarrier 和 Semaphore 这三个是 JUC 中较为常用的同步器,通过它们可以方便地实现很多线程之间协作的功能. CountDownLatch 直译过来就是倒计数(CountDown)门闩(Latch).倒计数不用说,门闩的意思顾名思义就是阻止前进.在这里就是指…
最近一直整并发这块东西,顺便写点Java并发的例子,给大家做个分享,也强化下自己记忆,如果有什么错误或者不当的地方,欢迎大家斧正. CyclicBarrier是一种多线程并发控制实用工具,和CountDownLatch非常类似,它也可以实现线程间的计数等待,但是它的功能比CountDownLatch更加复杂且强大.CyclicBarrier可以理解为循环栅栏,这个计数器可以反复使用.比如,假设我们将计数器设置为10,那么凑齐第一批10个线程后,计数器就会归零,然后接着凑齐下一批10个线程,这就是…
1 重入锁的好搭档:Condition条件 如果大家理解了Object.wait()和Object.notify()方法的话,那么就能很容易理解Condition接口了.它和wait()和notify()方法的作用大致是相同的.我们通过重入锁Lock接口的new Condition()方法可以生成一个与当前重入锁绑定的Condition实例.利用Condition对象,我们就可以让线程在合适的时间等待,或者在某一特定时刻得到通知,继续执行.顺带一提,Condition接口的实现类是Conditi…
CyclicBarrier 直译过来叫循环栅栏,它主要的方法就是一个:await().await() 方法没被调用一次,计数便会减少1,并阻塞住当前线程.当计数减至0时,阻塞解除,所有在此 CyclicBarrier 上面阻塞的线程开始运行.在这之后,如果再次调用 await() 方法,计数就又会变成 N-1,新一轮重新开始,这便是 Cyclic 的含义所在. CyclicBarrier 的使用并不难,但需要主要它所相关的异常.除了常见的异常,CyclicBarrier.await() 方法会抛…
这次谈话CyclicBarrier栅栏,如可以从它的名字可以看出,它是可重复使用. 它的功能和CountDownLatch类别似,也让一组线程等待,然后开始往下跑起来.但也有在两者之间有一些差别 1. 不同的对象等.CountDownLatch组线程等待的是一个事件.或者说是一个计数器归0的事件.而CyclicBarrier等待的对象是线程,仅仅有线程都到齐了才往下运行 2. 使用方式不同,这个也是由等待的对象不同引起的,CountDownLatch须要调用await()来让线程等待.调用cou…
CyclicBarrier类介绍A synchronization aid that allows a set of threads to all wait for each other to reach a common barrier point. CyclicBarriers are useful in programs involving a fixed sized party of threads that must occasionally wait for each other.…
字面意思回环栅栏,通过它可以实现让一组线程等待至某个状态之后再全部同时执行. java.util.concurrent.CyclicBarrier 类是一种同步机制,它能够对处理一些算法的线程实现同步.换句话讲,它就是一个所有线程必须等待的一个栅栏,直到所有线程都到达这里,然后所有线程才可以继续做其他事情. 字面意思回环栅栏,通过它可以实现让一组线程等待至某个状态之后再全部同时执行. 叫做回环是因为当所有等待线程都被释放以后,CyclicBarrier可以被重用. 叫做栅栏,大概是描述所有线程被…
在Java里面有几种可以用于控制线程状态的方法,如CountDownLatch计数器.CyclicBarrier循环栅栏.Sempahore信号量.下面就分别演示下他们的使用方法: CountDownLatch CountDownLatch可以实现多线程之间的计数器,并实现阻塞功能.比如某个任务依赖于其他的两个任务,只有那两个任务执行结束后,它才能执行. import java.util.concurrent.CountDownLatch; public class CountDownLatch…
CountDownLatch.CyclicBarrier和Semaphore 参考: http://www.cnblogs.com/dolphin0520/p/3920397.html https://blog.csdn.net/liuyi1207164339/article/details/51621902 在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的…
晚上打车回家,在车上看到一篇文章<22岁大学生获谷歌天价Offer,年薪千万!>,讲的是印度一个22岁大学生多次参加ACM大赛,开源多个项目,以非常牛逼的履历通过了谷歌的AI测试,斩获谷歌仅有的50个顶尖offer之一.于是感慨:同样是大学生,为何这哥们就这么一枝独秀呢?难道印度也有陈独秀?为啥自己都12年义务教育+4年大学教育+3年烟酒僧教育了,连人家个零头都挣不了啊?真恨不得在地上挖个洞钻进去.不行,今晚必须输出篇博客安慰下被打击的心!想到这里顿时酒也醒了(老大走了,今晚几个同事送他,喝了…
  java.util.concurrent.CyclicBarrier也是JDK 1.5提供的一个同步辅助类(为什么用也呢?參见再谈CountDownLatch).它同意一组线程互相等待,直到到达某个临界点(a common barrier point,翻译成公共障碍点.公共栅栏点都不够传神,直接用临界点吧).在某个程序中,一组固定大小的线程必须互相等待时.CyclicBarrier将起非常大的作用.由于在等待线程被释放后,这个临界点能够重用.所以说是循环的.   CyclicBarrier支…
一.概述 “循环栅栏”.大概的意思就是一个可循环利用的屏障. CyclicBarrier是一个同步辅助类,允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point).因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier. 栅栏类似于闭锁,它能阻塞一组线程直到某个事件的发生.栅栏与闭锁的关键区别在于,所有的线程必须同时到达栅栏位置,才能继续执行.闭锁用于等待事件,而栅栏用于等待其他线程. CyclicBarrier可以使一定数量的线程…