在 JDK1.5 后,推出了几个并发的工具类,位于 JUC(JAVA.util.concurrent)包下 。
CountDownLatchCountDownLatch 类是使一个线程等待其他线程各自执行完毕后再执行 。
类似于现实中某个活动需要等到全部人齐了才可以开始 。
实现原理:
- 基于 AQS 的共享模式 。
- 这个类是一个同步计数器,主要用于线程间的控制 。
- 当 CountDownLatch 的 count 计数 > 0 时,本线程的 await() 会造成阻塞,直到 count 变为 0,开始执行本线程 。
package test;import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class Test1 { public static void main(String[] args) { final CountDownLatch latch = new CountDownLatch(2); // 计数器初始化为 2,要等两个线程执行完毕 System.out.println("主线程开始执行"); ExecutorService es1 = Executors.newSingleThreadExecutor(); es1.execute(new Runnable() { @Override public void run() { try { Thread.sleep(3000); System.out.println("子线程:" + Thread.currentThread().getName() + "执行"); }catch (InterruptedException e){ e.printStackTrace(); } latch.countDown(); // 使计数器减一 } }); ExecutorService es2 = Executors.newSingleThreadExecutor(); es2.execute(new Runnable() { @Override public void run() { try { Thread.sleep(3000); }catch (InterruptedException e){ e.printStackTrace(); } System.out.println("子线程:" + Thread.currentThread().getName() + "执行"); latch.countDown(); } }); System.out.println("等待两个线程执行完毕"); try { latch.await(); // 主线程挂起,等待两个线程执行完 }catch (InterruptedException e){ e.printStackTrace(); } System.out.println("两个子线程都执行完毕,继续执行主线程"); }}主线程开始执行 等待两个线程执行完毕 子线程:pool-2-thread-1执行 子线程:pool-1-thread-1执行 两个子线程都执行完毕,继续执行主线程
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 菊花茶的好处,菊花茶有哪些好处
- 水鬼是什么样的 水鬼长啥样真实的
- PS制作出有纹理的背景素材
- 古代最常用的兵器 中国古代有名的兵器
- 这9个程序员工具网站,太牛了吧
- 常喝人参泡水的好处,人参泡水的大好处
- 百香果花茶的做法,百香果茶的做法种常见百香果饮品做法
- 男生粘人的心理原因是什么?
- 蛋皮经常痒是怎么回事?
- 常喝杨梅酒好处和坏处 喝杨梅酒好吗