当前位置: 首页 > 编程笔记 >

Java并发编程之栅栏(CyclicBarrier)实例介绍

沈伟
2023-03-14
本文向大家介绍Java并发编程之栅栏(CyclicBarrier)实例介绍,包括了Java并发编程之栅栏(CyclicBarrier)实例介绍的使用技巧和注意事项,需要的朋友参考一下

栅栏类似闭锁,但是它们是有区别的.

1.闭锁用来等待事件,而栅栏用于等待其他线程.什么意思呢?就是说闭锁用来等待的事件就是countDown事件,只有该countDown事件执行后所有之前在等待的线程才有可能继续执行;而栅栏没有类似countDown事件控制线程的执行,只有线程的await方法能控制等待的线程执行.

2.CyclicBarrier强调的是n个线程,大家相互等待,只要有一个没完成,所有人都得等着。

场景分析:10个人去春游,规定达到一个地点后才能继续前行.代码如下


import java.util.concurrent.BrokenBarrierException;

import java.util.concurrent.CyclicBarrier;

class CyclicBarrierWorker implements Runnable {     private int id;     private CyclicBarrier barrier;

    public CyclicBarrierWorker(int id, final CyclicBarrier barrier) {         this.id = id;         this.barrier = barrier;     }

    @Override     public void run() {         // TODO Auto-generated method stub         try {             System.out.println(id + " th people wait");             barrier.await(); // 大家等待最后一个线程到达         } catch (InterruptedException | BrokenBarrierException e) {             // TODO Auto-generated catch block             e.printStackTrace();         }     } }

public class TestCyclicBarrier {     public static void main(String[] args) {         int num = 10;         CyclicBarrier barrier = new CyclicBarrier(num, new Runnable() {             @Override             public void run() {                 // TODO Auto-generated method stub                 System.out.println("go on together!");             }         });         for (int i = 1; i <= num; i++) {             new Thread(new CyclicBarrierWorker(i, barrier)).start();         }     } }


输出

1 th people wait

2 th people wait

3 th people wait

4 th people wait

5 th people wait

7 th people wait

8 th people wait

6 th people wait

9 th people wait

10 th people wait

go on together!

 类似资料:
  • 本文向大家介绍Java并发编程(CyclicBarrier)实例详解,包括了Java并发编程(CyclicBarrier)实例详解的使用技巧和注意事项,需要的朋友参考一下 Java并发编程(CyclicBarrier)实例详解 前言:   使用JAVA编写并发程序的时候,我们需要仔细去思考一下并发流程的控制,如何让各个线程之间协作完成某项工作。有时候,我们启动N个线程去做一件事情,只有当这N个线程

  • 本文向大家介绍Java并发编程之闭锁与栅栏的实现,包括了Java并发编程之闭锁与栅栏的实现的使用技巧和注意事项,需要的朋友参考一下 一、前言 闭锁与栅栏是在多线程编程中的概念,因为在多线程中,我们不能控制线程的执行状态,所以给线程加锁,让其按照我们的想法有秩序的执行。 闭锁 CountDownLatch,实例化时需要传入一个int类型的数字(count),意为等待count个线程完成之后才能执行下

  • 本文向大家介绍Java并发实例之CyclicBarrier的使用,包括了Java并发实例之CyclicBarrier的使用的使用技巧和注意事项,需要的朋友参考一下 最近一直整并发这块东西,顺便写点Java并发的例子,给大家做个分享,也强化下自己记忆,如果有什么错误或者不当的地方,欢迎大家斧正。 CyclicBarrier是一种多线程并发控制实用工具,和CountDownLatch非常类似,它也可以

  • 本文向大家介绍Java并发系列之CyclicBarrier源码分析,包括了Java并发系列之CyclicBarrier源码分析的使用技巧和注意事项,需要的朋友参考一下 现实生活中我们经常会遇到这样的情景,在进行某个活动前需要等待人全部都齐了才开始。例如吃饭时要等全家人都上座了才动筷子,旅游时要等全部人都到齐了才出发,比赛时要等运动员都上场后才开始。在JUC包中为我们提供了一个同步工具类能够很好的模

  • 本文向大家介绍Java并发编程之Semaphore(信号量)详解及实例,包括了Java并发编程之Semaphore(信号量)详解及实例的使用技巧和注意事项,需要的朋友参考一下 Java并发编程之Semaphore(信号量)详解及实例 概述 通常情况下,可能有多个线程同时访问数目很少的资源,如客户端建立了若干个线程同时访问同一数据库,这势必会造成服务端资源被耗尽的地步,那么怎样能够有效的来控制不可预

  • 本文向大家介绍Erlang并发编程介绍,包括了Erlang并发编程介绍的使用技巧和注意事项,需要的朋友参考一下 Erlang中的process——进程是轻量级的,并且进程间无共享。查了很多资料,似乎没人说清楚轻量级进程算是什么概念,继续查找中。。。闲话不提,进入并发编程的世界。本文算是学习笔记,也可以说是《Concurrent Programming in ERLANG》第五张的简略翻译。 1.进

  • 本文向大家介绍Java并发中CountDownLatch和CyclicBarrier之间的区别,包括了Java并发中CountDownLatch和CyclicBarrier之间的区别的使用技巧和注意事项,需要的朋友参考一下 CountDownLatch和CyclicBarrier都在多线程环境中使用,它们都是其中的一部分。 根据Java Doc- CountDownLatch-同步辅助,允许一个或

  • 本文向大家介绍Java并发编程之ReentrantLock可重入锁的实例代码,包括了Java并发编程之ReentrantLock可重入锁的实例代码的使用技巧和注意事项,需要的朋友参考一下 目录 1.ReentrantLock可重入锁概述2.可重入3.可打断4.锁超时5.公平锁6.条件变量 Condition 1.ReentrantLock可重入锁概述 相对于 synchronized 它具备如下特