3.1.6 循环栅栏:CyclicBarrier

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=new CyclicBarrier(2);    public void run() {        System.out.println(Thread.currentThread().getName()+"准备开始");        try {            Thread.sleep(2000);            cyclicBarrier.await();            System.out.println(Thread.currentThread().getName()+"开始工作-------");        } catch (InterruptedException e) {            e.printStackTrace();        } catch (BrokenBarrierException e) {            e.printStackTrace();        }    }

public static void main(String[] args) throws BrokenBarrierException, InterruptedException {        CyclicBarrierTeST cyclicBarrierTeST=new CyclicBarrierTeST();        System.out.println("开始执行程序");        Thread thread=new Thread(cyclicBarrierTeST);        Thread thread2=new Thread(cyclicBarrierTeST);        thread.start();        thread2.start();        thread.join();        thread2.join();        System.out.println("fdsafsadfsadas");    }}

原文地址:https://www.cnblogs.com/anxbb/p/8425548.html

时间: 2024-08-01 16:20:25

3.1.6 循环栅栏:CyclicBarrier的相关文章

多线程之倒计时器CountDownLatch和循环栅栏CyclicBarrier

1.倒计时器CountDownLatch CountDownLatch是一个多线程控制工具类.通常用来控制线程等待,它可以让一个线程一直等待知道计时结束才开始执行 构造函数: public CountDownLatch(int count) //count 计数个数 例如:在主线程中启动10个子线程去数据库中获取分页数据,需要等到所有线程数据都返回之后统一做统计处理 public class CountDownLatchDemo implements Runnable{ private stat

24.循环栅栏 CyclicBarrier

import java.util.Random; import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; /** * 循环栅栏 CyclicBarrier * 可以反复使用的计数器 * 如:计数器设置为10,凑齐第一批10个线程后,计数器就会归零,然后接着凑齐下一批10个线程 * * public CyclicBarrier(int parties, Runnab

循环栅栏:CyclicBarrier(司令要求任务) 读书笔记

可以理解为循环栅栏,栅栏就是一种障碍物.假如我们将计数器设置为10,那么凑齐第一批10个线程后,计数器就会归零,然后接着凑齐下一批10个线程,这就是循环栅栏的含义. 构造器: public CyclicBarrier(int parties, Runnable barrierAction) parties:计数总数,也就是参与的线程总数. barrierAction 当计数器一次完成计数后,系统会执行的动作 下面代码展示了 司令要求10个士兵去完成任务,先集合10个然后去一起完成任务,等全部完成

栅栏——CyclicBarrier

栅栏CyclicBarrier和闭锁CountDownLatch类似,可以说它们都是用来计数,都能阻塞一组线程知道某个事件发生.不同的是闭锁用于等待事件,而栅栏用于等待其他线程. 在前一篇<CountDownLatch--闭锁的实现之一>中提到,在CountDownLatch里有一个计数器,一个线程完成一个任务后调用countdown方法使其计数器-1,等待线程则在执行方法前调用await方法,当CountDownLatch计数器减至0时将会放行的阻塞等待线程.那么CyclicBarrier所

闭锁CountDownLatch和栅栏CyclicBarrier之异同举例

CountDownLatch和CyclicBarrier的主要联系和区别如下: 1.闭锁CountDownLatch做减计数,而栅栏CyclicBarrier则是加计数. 2.CountDownLatch是一次性的,CyclicBarrier可以重用. 3.CountDownLatch强调一个线程等多个线程完成某件事情.CyclicBarrier是多个线程互等,等大家都完成. 4.鉴于上面的描述,CyclicBarrier在一些场景中可以替代CountDownLatch实现类似的功能. 另外,值

并发编程——闭锁CountDownLatch 与 栅栏CyclicBarrier

Java并发编程实践 目录 并发编程—— ConcurrentHashMap 并发编程—— 阻塞队列和生产者-消费者模式 并发编程——闭锁CountDownLatch 与 栅栏CyclicBarrier 概述 第1部分 闭锁 第2部分 栅栏 参考 第1部分 闭锁 闭锁是一种同步工具类,可以延迟线程的进度直到其到达终止状态.闭锁的作用相当于一扇门:在闭锁到达结束状态之前,这扇门一直是关闭的,并且没有任何线程能通过,当到达结束状态时,这扇门会打开并允许所有的线程通过.当闭锁到达结束状态后,将不会再改

同步工具类-----循环栅栏:CyclicBarrier

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

java.util.concurrent.CyclicBarrier 类是一种同步机制,它能够对处理一些算法的线程实现同步.换句话讲,它就是一个所有线程必须等待的一个栅栏,直到所有线程都到达这里,然后所有线程才可以继续做其他事情. 1 package cyclicbarrier; 2 3 import java.util.concurrent.BrokenBarrierException; 4 import java.util.concurrent.ConcurrentHashMap; 5 im

栅栏cyclicbarrier

栅栏类似闭锁,但是它们是有区别的. 1.闭锁用来等待事件,而栅栏用于等待其他线程.什么意思呢?就是说闭锁用来等待的事件就是countDown事件,只有该countDown事件执行后所有之前在等待的线程才有可能继续执行;而栅栏没有类似countDown事件控制线程的执行,只有线程的await方法能控制等待的线程执行. 2.CyclicBarrier强调的是n个线程,大家相互等待,只要有一个没完成,所有人都得等着. 场景分析:10个人去春游,规定达到一个地点后才能继续前行.代码如下 代码如下: im