18 CyclicBarrier CountDownLacth

2024-04-29 13:08

本文主要是介绍18 CyclicBarrier CountDownLacth,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

CyclicBarrier使用

假设只有一个场景,每个线程代表一个跑步运动员,当运动员都准备好后,才一起出发,只要有一个人没有准备好,大家都等待。

 

代码示例:

 

import java.io.IOException;  

import java.util.Random;  

import java.util.concurrent.BrokenBarrierException;  

import java.util.concurrent.CyclicBarrier;  

import java.util.concurrent.ExecutorService;  

import java.util.concurrent.Executors;

public class UseCyclicBarrier {

 

static class Runner implements Runnable {  

    private CyclicBarrier barrier;  

    private String name;  

    

    public Runner(CyclicBarrier barrier, String name) {  

        this.barrier = barrier;  

        this.name = name;  

    }  

    @Override  

    public void run() {  

        try {  

            Thread.sleep(1000 * (new Random()).nextInt(5));  

            System.out.println(name + "OK.");  

            barrier.await();  

        } catch (InterruptedException e) {  

            e.printStackTrace();  

        } catch (BrokenBarrierException e) {  

            e.printStackTrace();  

        }  

        System.out.println(name + " Go!!");  

    }  

}

    public static void main(String[] args) throws IOException, InterruptedException {  

        /**

         * 当达到3个await后,一起执行等待后面的代码

         */

    CyclicBarrier barrier = new CyclicBarrier(3);  // 3

        

        ExecutorService executor = Executors.newFixedThreadPool(3);  

        

        executor.submit(new Thread(new Runner(barrier, "zhangsan")));  

        executor.submit(new Thread(new Runner(barrier, "lisi")));  

        executor.submit(new Thread(new Runner(barrier, "wangwu")));  

  

        executor.shutdown();  

    }  

  

}  

代码结果:

lisiOK.

wangwuOK.

zhangsanOK.

zhangsan Go!!

wangwu Go!!

lisi Go!!


 CountDownLacth使用

它经常用于监听某些初始化操作,等待初始化执行完毕后,通知主线程继续工作。

 

代码示例:

import java.util.concurrent.CountDownLatch;

 

/**

 * new CountDownLatch(2)中的参数是2,即当countDown.await()后

 * 需要2次countDown.countDown();后才会去执行countDown.await()后面的代码

 * @author Vision_TXG

 *

 */

public class UseCountDownLatch {

 

public static void main(String[] args) {

//注意参数

final CountDownLatch countDown = new CountDownLatch(2);

Thread t1 = new Thread(new Runnable() {

@Override

public void run() {

try {

System.out.println("进入线程t1" + "等待其他线程处理完成。。。");

countDown.await();//需要等待两个countDown.countDown()操作,由定义的参数决定

System.out.println("t1线程继续执行....");

} catch (InterruptedException e) {

e.printStackTrace();

}

}

},"t1");

Thread t2 = new Thread(new Runnable() {

@Override

public void run() {

try {

System.out.println("t2线程进行初始化操作...");

Thread.sleep(3000);

System.out.println("t2线程初始化完毕,通知t1线程继续...");

countDown.countDown();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

});

Thread t3 = new Thread(new Runnable() {

@Override

public void run() {

try {

System.out.println("t3线程进行初始化操作...");

Thread.sleep(4000);

System.out.println("t3线程初始化完毕,通知t1线程继续...");

countDown.countDown();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

});

t1.start();

t2.start();

t3.start();

}

}

 

代码执行结果:

进入线程t1等待其他线程处理完成。。。

t2线程进行初始化操作...

t3线程进行初始化操作...

t2线程初始化完毕,通知t1线程继续...

t3线程初始化完毕,通知t1线程继续...

t1线程继续执行....

注意:CyclicBarrierCountDownLacth的区别

 

CountDownLacth是一个线程等待,其他的n个线程发出通知。针对的是一个线程

CyclicBarrier的线程都是参与阻塞的。针对的是多个线程。


这篇关于18 CyclicBarrier CountDownLacth的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/946174

相关文章

react笔记 8-18 事件 方法 定义方法 获取/改变数据 传值

1、定义方法并绑定 class News extends React.Component {constructor(props) {super(props)this.state = {msg:'home组件'}}run(){alert("我是一个run") //方法写在类中}render() {return (<div><h2>{this.state.msg}</h2><button onCli

Day18_0.1基础学习MATLAB学习小技巧总结(18)——MATLAB绘图篇(1)

利用空闲时间把碎片化的MATLAB知识重新系统的学习一遍,为了在这个过程中加深印象,也为了能够有所足迹,我会把自己的学习总结发在专栏中,以便学习交流。 参考书目:《MATLAB基础教程 (第三版) (薛山)》 之前的章节都是基础的数据运算用法,对于功课来说更加重要的内容是建模、绘图、观察数据趋势,接下来我会结合自己的使用经验,来为大家分享绘图、建模使用的小技巧。 二维图形绘制 在本章开

18. 4 Sum

题目: 解答: 与之前的三数之和的解法类似,也是先排序,然后不断剔除不可能的条件,最后两个参数,通过两头求和计算得出。 代码: class Solution {public:vector<vector<int>> fourSum(vector<int>& nums, int target) {vector<vector<int>> result;int len = nums.size

系统架构师考试学习笔记第三篇——架构设计高级知识(18)面向服务架构设计理论与实践

本章考点:         第18课时主要学习面向服务架构设计理论与实践。根据考试大纲,本课时知识点会涉及单选题型(约占2~5分)和案例题(25分),本课时内容偏重于方法的掌握和应用,根据以往全国计算机技术与软件专业技术资格(水平)考试的出题规律,概念知识的考查内容多数来源于实际应用,还需要灵活运用相关知识点。         本课时知识架构如图18.1所示。 一、SOA的相关概念 (

PHP 验证身份号码 包括15位18位

查了很多资料 发现网上身份证15位的验证并不是那么严谨  今天研究了一下  代码如下 <?phpfunction check_id_card($num){//老身份证长度15位,新身份证长度18位$length = strlen($num);if ($length == 15) { //如果是15位身份证//15位身份证没有字母if (!is_numeric($num)) {return fa

最简单的使用JDBC[连接数据库] mysql 2019年3月18日

最极简版本的, 我们这里以mysql为例: 首先要创建maven工程, 需要引入jar包:,这里需要注意, 如果你安装的是mysql最新版本8以上的, 下面有些地方需要更改,具体就是mysql连接的url, 和5版本的不一样,具体解决请自行百度哈.这里只演示mysql5版本的? 依赖: <dependency>   <groupId>mysql</groupId>   <artifactId

【JAVA高级】并发同步工具CyclicBarrier 的使用介绍

📝个人主页🌹:个人主页 ⏩收录专栏⏪:JAVA进阶 🌹🌹期待您的关注 🌹🌹,让我们共同进步! 文章目录 CyclicBarrier 简介CyclicBarrier 的场景示意图:单次屏障作用示意:循环的屏障作用示意: CyclicBarrier 的主要方法包括:CyclicBarrier 使用 CyclicBarrier 简介 CyclicBarrier 是

实变函数精解【18】

文章目录 有限测度有限测度概率测度有限测度与概率测度的关系 σ \sigma σ-有限测度计数测度完备概率测度 参考文献 有限测度 首先,我们来明确“测度”的概念。在数学中,测度是一个将集合映射到非负实数(通常是实数的扩展,包括正无穷)的函数,它满足某些特定的性质,比如非负性、可加性等。有了这个基础,我们可以进一步探讨有限测度和概率测度的具体定义和它们之间的关系。 有限测度

java 多线程 CountDownLatch、CyclicBarrier、Semaphore

在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法。   以下是本文目录大纲:   一.CountDownLatch用法   二.CyclicBarrier用法   三.Semaphore用法   若有不正之处请多多谅解,并欢迎批评指正。

【ACdream】ACdream原创群赛(18)のAK's dream

这次的群赛AK的不少,7题的也很多啊。。Orrrrrrrz。。。。 暂时只写出7题。。。 A:1196 模拟。。 /** this code is made by poursoul* Problem: 1196* Verdict: Accepted* Submission Date: 2014-09-06 19:12:44* Time: 0MS* Memo