ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

CountDownLatch用法

2021-06-21 21:34:41  阅读:229  来源: 互联网

标签:Thread -- 下班 用法 运动员 线程 CountDownLatch


/**
 * CountDownLatch的两种使用场景:
 * 场景1:让多个线程等待
 * 场景2:和让单个线程等待。
 */
public class CountDownLatchDemo {

	public static void main(String[] args) {
//		changjing1();
		changjing2();
	}
	
	//场景1:让多个线程等待
	/**
	 * >(1)在这个场景中,CountDownLatch充当的是一个发令枪的角色;
	 * 就像田径赛跑时,运动员会在起跑线做准备动作,等到发令枪一声响,运动员就会奋力奔跑。
	 * 
	 * >(2)我们通过CountDownLatch.await(),让多个参与者线程启动后阻塞等待,
	 * 然后在主线程 调用CountDownLatch.countdown(1) 将计数减为0,
	 * 让所有线程一起往下执行;以此实现了多个线程在同一时刻并发执行,来模拟并发请求的目的。
	 */
	public static void changjing1() {
		CountDownLatch countDownLatch = new CountDownLatch(1);
		for (int i = 0; i < 5; i++) {
			final int index = i;
			new Thread(()->{
				try {
					System.out.println(Thread.currentThread().getName() + "\t运动员" + index + "号\t准备");
					////准备完毕……运动员都阻塞在这,等待号令
					countDownLatch.await();
					System.out.println(Thread.currentThread().getName() + "\t运动员" + index + "号\t开跑");
				} catch (InterruptedException e) {
					
				}
			},"线程" + i).start();
		}
		try {
			Thread.sleep(3000);
		} catch (InterruptedException e) {
		
		}
		countDownLatch.countDown();
	}
	//场景2:和让单个线程等待。
	//5个人都下班,才算真正的下班
	public static void changjing2() {
		CountDownLatch countDownLatch = new CountDownLatch(5);
		for (int i = 0; i < 5; i++) {
			final int index = i;
			new Thread(()->{
				System.out.println(Thread.currentThread().getName() + " --> 员工" + index + "号\t收拾东西下班");
				try {
					Thread.sleep(1000 + ThreadLocalRandom.current().nextInt(1000));
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				countDownLatch.countDown();
			},"线程" + i).start();
		}
		try {
			countDownLatch.await();
		} catch (InterruptedException e) {
		}
		System.out.println("所有人都走了,可以下班了,嘿嘿^_^");
	}
}
  • 场景1输出结果:
线程0	运动员0号	准备
线程4	运动员4号	准备
线程3	运动员3号	准备
线程1	运动员1号	准备
线程2	运动员2号	准备
线程0	运动员0号	开跑
线程1	运动员1号	开跑
线程3	运动员3号	开跑
线程4	运动员4号	开跑
线程2	运动员2号	开跑
  • 场景2输出结果:
线程1 --> 员工1号	收拾东西下班
线程3 --> 员工3号	收拾东西下班
线程4 --> 员工4号	收拾东西下班
线程2 --> 员工2号	收拾东西下班
线程0 --> 员工0号	收拾东西下班
所有人都走了,可以下班了,嘿嘿^_^

标签:Thread,--,下班,用法,运动员,线程,CountDownLatch
来源: https://www.cnblogs.com/kaka-qiqi/p/14915885.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有