24.循环栅栏 CyclicBarrier】的更多相关文章

import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; /** * CyclicBarrier可看成是个障碍, 所有的线程必须到齐后才能一起通过这个障碍.  */ public class CyclicBarrierDemo extends Thread { private CyclicBarrier cyclicBarrier; public CyclicBar…
1.倒计时器CountDownLatch CountDownLatch是一个多线程控制工具类.通常用来控制线程等待,它可以让一个线程一直等待知道计时结束才开始执行 构造函数: public CountDownLatch(int count) //count 计数个数 例如:在主线程中启动10个子线程去数据库中获取分页数据,需要等到所有线程数据都返回之后统一做统计处理 public class CountDownLatchDemo implements Runnable{ private stat…
昨天我们学习了倒计数功能的等待,今天我们学习的是循环栅栏:CyclicBarrier.下面我们就开始吧: 1.CyclicBarrier简介CyclicBarrier,是JDK1.5的java.util.concurrent并发包中提供的一个并发工具类.所谓Cyclic即 循环 的意思,所谓Barrier即 屏障 的意思.所以综合起来,CyclicBarrier指的就是 循环屏障,虽然这个叫法很奇怪,但是确能很好地表示它的作用.其作用在JDK注释中是这样描述的: 翻译过来,如下: CyclicB…
这是java高并发系列第17篇. 本文主要内容: 介绍CyclicBarrier 6个示例介绍CyclicBarrier的使用 对比CyclicBarrier和CountDownLatch CyclicBarrier简介 CyclicBarrier通常称为循环屏障.它和CountDownLatch很相似,都可以使线程先等待然后再执行.不过CountDownLatch是使一批线程等待另一批线程执行完后再执行:而CyclicBarrier只是使等待的线程达到一定数目后再让它们继续执行.故而Cycli…
可以理解为循环栅栏,栅栏就是一种障碍物.假如我们将计数器设置为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…
CyclicBarrier是JDK 1.5 concurrent包出现的一个用于解决多条线程阻塞,当达到一定条件时一起放行的一个类.我们先来看这样一个简单的需求. 现在我有一个写入数据的类,继承Runable接口: public class WriteDateThread implements Runnable { @Override public void run() { System.out.println(Thread.currentThread().getName() + "开始写入数据…
简介 java.util.concurrent包是Java 5的一个重大改进,java.util.concurrent包提供了多种线程间同步和通信的机制,比如Executors, Queues, Timing, Synchronizers和Concurrent Collections等.与synchronized关键字和Object.notify()等方法相比,这些类和方法的抽象层次都较高.Effective Java中提到,其中比较重要的同步和通信机制有Executor框架.Concurren…
CyclicBarrier官方文档 一.原理 CyclicBarrier是另外一种多线程并发控制实用工具.它和CountDownLatch非常类似,它也可以实现线程的计数等待,但它的功能比CountDownLatch更加复杂且强大. CyclicBarrier可以理解为循环栅栏.栅栏就是一种障碍物,比如私人住宅围上一圈栅栏可以阻止闲杂人进入.它是用来阻止线程继续执行,要求线程在栅栏处等待.前面Cyclic意为循环,也就是说这个计数器可以反复使用. 二.API 三.Demo 四.CyclicBar…
Java并发编程实践 目录 并发编程 01—— ThreadLocal 并发编程 02—— ConcurrentHashMap 并发编程 03—— 阻塞队列和生产者-消费者模式 并发编程 04—— 闭锁CountDownLatch 与 栅栏CyclicBarrier 并发编程 05—— Callable和Future 并发编程 06—— CompletionService : Executor 和 BlockingQueue 并发编程 07—— 任务取消 并发编程 08—— 任务取消 之 中断…
栅栏CyclicBarrier和闭锁CountDownLatch类似,可以说它们都是用来计数,都能阻塞一组线程知道某个事件发生.不同的是闭锁用于等待事件,而栅栏用于等待其他线程. 在前一篇<CountDownLatch--闭锁的实现之一>中提到,在CountDownLatch里有一个计数器,一个线程完成一个任务后调用countdown方法使其计数器-1,等待线程则在执行方法前调用await方法,当CountDownLatch计数器减至0时将会放行的阻塞等待线程.那么CyclicBarrier所…
Java多线程编程-(1)-线程安全和锁Synchronized概念 Java多线程编程-(2)-可重入锁以及Synchronized的其他基本特性 Java多线程编程-(3)-从一个错误的双重校验锁代码谈一下volatile关键字 Java多线程编程-(4)-线程本地ThreadLocal的介绍与使用 Java多线程编程-(5)-线程间通信机制的介绍与使用 Java多线程编程-(6)-你还在使用wait/notify实现进程间的通信吗? Java多线程编程-(7)-使用ReentrantRea…
一.简介 栅栏CyclicBarrier的作用就是等待一组线程都准备好了,然后执行某个任务.这与CountDownLatch很相似. 但是CyclicBarrier和CountDownLatch是有区别的: 1)CyclicBarrier可以复用,你可以调用Reset方法重新初始化:CountDownLatch是一次性的. 2)CyclicBarrier是一组线程相互等待,而CountDownLatch是一个或一组线程等待另外一个或者一组线程. JDK文档:http://tool.oschina…
上一篇总结了闭锁CountDownLatch,这一篇总结一下栅栏CyclicBarrier.它们两者之间的区别主要是,闭锁是等待一个事件发生,比如上一篇的田径比赛,运动员等待裁判哨声一响就可以开始跑,假如这个时候某个选手走神了,还没准备就绪,这个时候其他队员不需要等待他准备就绪才可以开始跑. 而栅栏呢,就必须等待所有队员准备就绪的时候,才可以开始跑.类似生活中,我们几个人约好出去春游,出发前,我们在某一个地点集合,等所有人都到齐的时候,我们才开始搭车出去春游,如果某一个小伙伴还没到聚集地,我们就…
https://blog.csdn.net/lmc_wy/article/details/7866863   闭锁CountDownLatch与栅栏CyclicBarrier     浅谈 java 信号量 Semaphore   https://blog.csdn.net/sias606/article/details/52330126   TestSemaphore testSemaphore = new TestSemaphore(); testSemaphore.exeAction();…
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.util.concurrent.CyclicBarrier 类是一种同步机制,它能够对处理一些算法的线程实现同步.换句话讲,它就是一个所有线程必须等待的一个栅栏,直到所有线程都到达这里,然后所有线程才可以继续做其他事情. package cyclicbarrier; import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.ConcurrentHashMap; import java.…
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多线程下循环计数器 本文主要内容:CyclicBarrier(下文中凯哥就用cycBar来代替)定义介绍:举例说明:代码演示:从源码来看原理及总结:CyclicBarrier与CountDownLatch(下文就用CountDown来代替)比较. 本篇是<凯哥(凯哥Java:kagejava)并发编程学习>系列之<并发工具类>教程的第二篇:<Java多线程下循环计数器>. 编辑 一:CyclicBarrier是什么 cycBar是什么呢? 来看看JDKAPI文档…
很多文章只是提了下可重用,具体这个栅栏怎么可重用的,很多没有说明,这里会解开你的疑惑. CyclicBarrier是一个同步工具类,它允许一组线程互相等待,直到达到某个公共屏障点.与CountDownLatch不同的是该barrier在释放线程等待后可以重用,所以它称为循环(Cyclic)的屏障(Barrier). CyclicBarrier支持一个可选的Runnable命令,在一组线程中的最后一个线程到达之后(但在释放所有线程之前),该命令只在每个屏障点运行一次.若再继续所有的参与线程之前更新…
通过它可以实现让一组线程等待至某个状态之后再全部同时执行.叫做回环是因为当所有等待线程都被释放以后,CyclicBarrier可以被重用.我们暂且把这个状态就叫做barrier,当调用await()方法之后,线程就处于barrier了. CyclicBarrier类位于java.util.concurrent包下,CyclicBarrier提供2个构造器: ? 1 2 3 4 5 public CyclicBarrier(int parties, Runnable barrierAction)…
栅栏类似闭锁,但是它们是有区别的. 1.闭锁用来等待事件,而栅栏用于等待其他线程.什么意思呢?就是说闭锁用来等待的事件就是countDown事件,只有该countDown事件执行后所有之前在等待的线程才有可能继续执行;而栅栏没有类似countDown事件控制线程的执行,只有线程的await方法能控制等待的线程执行. 2.CyclicBarrier强调的是n个线程,大家相互等待,只要有一个没完成,所有人都得等着. 场景分析:10个人去春游,规定达到一个地点后才能继续前行.代码如下 代码如下: im…
JDK包位置:java.util.concurrent.CyclicBarrier 一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point).在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用.因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier. CyclicBarrier 支持一个可选的 Runnable 命令,在一组线程中的最后一个线程到达之后(但在释放所…
CyclicBarrier 的字面意思是可循环使用(Cyclic)的屏障(Barrier).它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活. 这个屏障之所以用循环修饰,是因为在所有的线程释放彼此之后,这个屏障是可以重新使用的(reset()方法重置屏障点).这一点与CountDownLatch不同 CyclicBarrier CyclicBarrier,让一组线程到达一个同步点后再一起继续运行,在其中任…
字面意思回环栅栏,通过它可以实现让一组线程等待至某个状态之后再全部同时执行. java.util.concurrent.CyclicBarrier 类是一种同步机制,它能够对处理一些算法的线程实现同步.换句话讲,它就是一个所有线程必须等待的一个栅栏,直到所有线程都到达这里,然后所有线程才可以继续做其他事情. 字面意思回环栅栏,通过它可以实现让一组线程等待至某个状态之后再全部同时执行. 叫做回环是因为当所有等待线程都被释放以后,CyclicBarrier可以被重用. 叫做栅栏,大概是描述所有线程被…
我们先看一个 小例子 , 使用 join 与CountDownSlatch 都可以完成 当1,2线程 完全结束后 3 线程 start 对比我们就能够知道 CountDownSlatch 比 JOIN 更能够控制粒度 因为 他只要 计数 为0 就好 package com.ghc.mmall.concurrency.test; import java.util.ArrayList; import java.util.List; /** * @author :Frank Li * @date :C…
java高并发系列第24篇文章. 环境:jdk1.8. 本文内容 需要解决的问题 介绍ThreadLocal 介绍InheritableThreadLocal 需要解决的问题 我们还是以解决问题的方式来引出ThreadLocal.InheritableThreadLocal,这样印象会深刻一些. 目前java开发web系统一般有3层,controller.service.dao,请求到达controller,controller调用service,service调用dao,然后进行处理. 我们写…