Java中关于CountDownLatch的使用
CyclicBarrier工具类主要是控制多个线程的一起执行,演示程序:
import java.util.Random;
import java.util.concurrent.CountDownLatch;
/**
*
* CyclicBarrier和CountDownLatch功能类似,都可以用作在所有线程都做好准备(比如赛跑:
* 每一个运动员可以认为是一个线程,只有当所有运动员做好准备才能鸣枪开始跑)之后一起触发运行。 <br>
* <br>
* 但是也有区别:<br>
* 1:CountDownLatch(初始值为线程个数)需要每当一个线程准备好之后,调用一下countDown方法,告诉CountDownLatch又有一个线程已经完成准备,当CountDownLatch值为0时候则触发所有线程一起执行<br>
* 2:CyclicBarrier(初始值为线程个数)需要每当一个线程准备好之后运行时候会阻塞在await处,当所有线程都阻塞在await处时候,即可触发所有线程执行。(CyclicBarrier:可以循环使用,每当触发完毕一次之后还可以
* 再次使用该CyclicBarrier的实例对象)
*/
public class CountDownLatchDemo { public static void main(String[] args) throws Exception { CountDownLatch c = new CountDownLatch(3);
Thread t1 = newThread("t1", c);
Thread t2 = newThread("t2", c);
Thread t3 = newThread("t3", c);
t1.start();
t2.start();
t3.start(); System.out.println("线程启动完毕!"); // 下面工作模拟线程的一些自资源初始化 // 模拟线程1资源初始化
int time = new Random().nextInt(5);
System.out.println(" sleep " + time + "秒 。");
Thread.sleep(time * 1000);
c.countDown(); //到此线程1初始化完毕 // 模拟线程2资源初始化
time = new Random().nextInt(5);
System.out.println(" sleep " + time + "秒 。");
Thread.sleep(time * 1000);
c.countDown();//到此线程2初始化完毕
// 模拟线程3资源初始化
time = new Random().nextInt(5);
System.out.println(" sleep " + time + "秒 。");
Thread.sleep(time * 1000);
c.countDown();//到此线程3初始化完毕 // 所有资源都准备完毕,触发三个线程执行 } public static Thread newThread(final String threadName, final CountDownLatch c) { return new Thread(new Runnable() { @Override
public void run() {
try { c.await();
System.out.println(threadName + " is running .");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}, threadName);
} }
Java中关于CountDownLatch的使用的更多相关文章
- java中的CountDownLatch
闭锁是一种同步工具类,可以延迟线程的进度直到其达到终止状态.闭锁的作用相当于一扇门:在闭锁到达结束状态值钱,这扇门一直是关闭的,没有任何线程可以通过,当到大结束状态时,这扇门会打开并允许所有的线程通过 ...
- Java中使用CountDownLatch进行多线程同步
CountDownLatch介绍 在前面的Java学习笔记中,总结了Java中进行多线程同步的几个方法: 1.synchronized关键字进行同步. 2.Lock锁接口及其实现类ReentrantL ...
- JAVA中的CountDownLatch、CyclicBarrier、Semaphore的简单测试
因公司需要做一个对于CountDownLatch的分享,特写了此blog. 具体细节可以参见:小结java自带的跟锁相关的一些类 在做这个分享的过程中发现了Main和junit的运行的区别,在另外一个 ...
- java 中的CountDownLatch
直接使用thread可以使用thread和wait notify 实现顺序执行 线程池中可以使用CountDownLatch 进行顺序执行 package com.test; import java. ...
- Java中多线程同步类 CountDownLatch
在多线程开发中,常常遇到希望一组线程完成之后在执行之后的操作,java提供了一个多线程同步辅助类,可以完成此类需求: 类中常见的方法: 其中构造方法:CountDownLatch(int count) ...
- Java中CountDownLatch和CyclicBarrier的使用和比较
CountDownLatch和CyclicBarrier同为Java1.5开始引入的,应用于多线程编程中的一种工具,二者用途十分相近,十分容易混淆. CountDownLatch CountDownL ...
- Java中的4个并发工具类 CountDownLatch CyclicBarrier Semaphore Exchanger
在 java.util.concurrent 包中提供了 4 个有用的并发工具类 CountDownLatch 允许一个或多个线程等待其他线程完成操作,课题点 Thread 类的 join() 方法 ...
- Java中CountDownLatch和CyclicBarrier
Java编程思想中的例子import javax.validation.constraints.Size; import java.util.Random; import java.util.conc ...
- Java中类似C#中Task.wait()的类CountDownLatch
当主线程开辟多个子线程,而又需要这些子线程都执行完成后再执行主线程后续的操作,在C#中可以通过Task的wait方法来实现,然而在Java中也有类型的类CountDownLatch,具体用法如下: p ...
随机推荐
- FFmpeg编解码处理2-编解码API详解
本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10584925.html FFmpeg编解码处理系列笔记: [0]. FFmpeg时间戳详 ...
- easyui datagrid 禁止选中行
没有找到可以直接禁止的属性,但是找到两个间接禁止的方式. 方式一: //onClickRow: function (rowIndex, rowData) { // $(this).datagr ...
- SQL Server 2012使用Offset/Fetch Next实现分页
在Sql Server 2012之前,实现分页主要是使用ROW_NUMBER(),在SQL Server2012,可以使用Offset ...Rows Fetch Next ... Rows onl ...
- MVC 的 Razor引擎显示代码表达式与隐式代码表达式
隐式代码表达式 就是一个标识符,之后可以跟任意数量的方法调用("()").索引表达式("[]")及成员访问表达式(".").但是,除了在&q ...
- Spring全家桶系列–SpringBoot之入门JPA
//本文作者:cuifuan 什么是JPA? 一种规范,并非ORM框架,也就是ORM上统一的规范 用了之后可以做什么,为什么要用? 代码解释: 实体类 package com.example.spri ...
- 内网访问已经启动的vue项目
1. 项目本机启动地址: http://localhost:8090/#/login 2.项目内网启动地址: http://192.168.1.172:8090/#/login 3. 在vue项目的 ...
- 自定义基于jquery竖向瀑布流插件
公司新项目做了一个关于图片的板块,网上找了一些瀑布流插件都不是很适合自己,于是就自己造轮子写一个,并封装成插件github 于是就想分享一下,主要是为了更好的学习与记忆. 如果大家进来了,希望能给我g ...
- MySQL安装的挫折之路
由于对MySQL卸载的不干净,mysql 的MySQL Connector Net/xxx无法卸载,后期重装无法成功.所以只能采用zip 安装https://www.cnblogs.com/Micha ...
- python自动化开发-6
python的常用模块(续) shutil模块:主要是做文件复制的.文件,文件夹,压缩包等的处理模块. 常用的方法: shutil.copyfileobj:将文件的内容拷贝到另一个文件中. 例子: # ...
- JMeter 查看结果树监听器响应数据中文显示乱码解决方法
查看结果树监听器响应数据中文显示乱码解决方法 by:授客 QQ:1033553122 问题描述 使用监听器-查看结果树(View Results Tree Listener)过程中发现,响应数据面 ...