当前位置: 首页 > news >正文

java.util.concurrent.CountDownLatch用方法

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

package cm.concurrent;

import java.util.concurrent.CountDownLatch;

public class UseContDownLatch {
	public static void main(String[] args) {
        //2表示唤醒的次数,如果没有达到唤醒的次数,countDownLatch.await();之后的业务将无法执行!
		final CountDownLatch countDownLatch = new CountDownLatch(2);
		Thread t1=new Thread(new Runnable() {
			@Override
			public void run() {
				try {
					System.out.println("进入t1线程,等待其他线程处理完成.........");
					countDownLatch.await();
					System.out.println("t2和t3初始化完成,t1才能线程继续执行.................");
				} catch (Exception 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线程可以继续执行.................");
                    //第一次唤醒
					countDownLatch.countDown();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		},"t2");
		Thread t3=new Thread(new Runnable() {
			@Override
			public void run() {
				try {
					System.out.println("进入t3线程进行初始化.........");
					Thread.sleep(4000);
					System.out.println("t3说:t1线程可以继续执行.................");
                    //第二次唤醒
					countDownLatch.countDown();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		},"t3");
		t1.start();
		t2.start();
		t3.start();
	}
}

确切的来说,第一次唤醒和第二次唤醒并不是绝对的,因为线程中每个线程争取cpu的先后顺序都书随机的,哪个先执行,哪个就是第一次唤醒。

转载于:https://my.oschina.net/2286252881/blog/863071

相关文章:

  • PSI分析
  • Hibernate JPA中@Transient、@JsonIgnoreProperties、@JsonIgnore、@JsonFormat、@JsonSerialize等注解解释...
  • maven的基本原理和使用
  • cocos2d-x -Lua 字符串
  • [系统资源攻略]IO第一篇-磁盘IO,内核IO概念
  • 深入理解CSS中的margin
  • 有哪些話让你看了一遍就再也没有忘记?
  • 搭建nlp_server服务器
  • 修身
  • android classloader双亲委托模式
  • 手机号中间四位加星号
  • UISearchBar使用及修改样式
  • 关于api-ms-win-crt-runtimel1-1-0.dll缺失的解决方案
  • Android 高德地图入门详解
  • JavaScript操作符
  • [译]如何构建服务器端web组件,为何要构建?
  • 4个实用的微服务测试策略
  • ES2017异步函数现已正式可用
  • es6
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • OSS Web直传 (文件图片)
  • TCP拥塞控制
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 爱情 北京女病人
  • 从零搭建Koa2 Server
  • 分享几个不错的工具
  • 欢迎参加第二届中国游戏开发者大会
  • 机器学习中为什么要做归一化normalization
  • 收藏好这篇,别再只说“数据劫持”了
  • 系统认识JavaScript正则表达式
  • 自动记录MySQL慢查询快照脚本
  • mysql面试题分组并合并列
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (利用IDEA+Maven)定制属于自己的jar包
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (一)基于IDEA的JAVA基础12
  • .Net Web项目创建比较不错的参考文章
  • .NET 事件模型教程(二)
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • /bin/bash^M: bad interpreter: No such file ordirectory
  • @SpringBootApplication 包含的三个注解及其含义
  • @基于大模型的旅游路线推荐方案
  • [ HTML + CSS + Javascript ] 复盘尝试制作 2048 小游戏时遇到的问题
  • [ vulhub漏洞复现篇 ] Jetty WEB-INF 文件读取复现CVE-2021-34429
  • [ 环境搭建篇 ] 安装 java 环境并配置环境变量(附 JDK1.8 安装包)
  • [acm算法学习] 后缀数组SA
  • [Asp.net MVC]Bundle合并,压缩js、css文件
  • [BZOJ3757] 苹果树
  • [CUDA手搓]从零开始用C++ CUDA搭建一个卷积神经网络(LeNet),了解神经网络各个层背后算法原理
  • [Delphi]一个功能完备的国密SM4类(TSM4)[20230329更新]
  • [IE编程] IE8 新增的C++开发接口