public static void main(String[] args) throws InterruptedException {
/**
* 一、代码逻辑
* 1.主线程启动
* 2.并行任务开始执行
* 3.各并行任务执行过程
* 4.主线程阻塞
* 5.各并行任务执行完成
* 6.主线程检查各并行任务完成情况
*
* 二、解决什么问题
* 1.高耗时任务并行处理提升性能
*
* 三、适用场景
* 1.单一的或者重复高的耗时的任务拆解为并行任务并行处理提升性能
* 2.复杂高耗时任务按某种规则拆解为并行任务并行处理提升性能
*/
System.out.println("包工头 等待所有所有工人搬运砖头......");
int waitThreadCount=3;
CountDownLatch countDownLatch = new CountDownLatch(waitThreadCount);
Vector<String> list = new Vector<>();
for (int i = 0; i < waitThreadCount; i++) {
new Thread(()->{
System.out.println(Thread.currentThread().getName()+"开始执行搬运工作");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
list.add(Thread.currentThread().getName()+"搬运了3万块砖头");
System.out.println(Thread.currentThread().getName()+"搬运完了");
countDownLatch.countDown();
},"工人-"+i).start();
}
countDownLatch.await();
// countDownLatch.await(6, TimeUnit.SECONDS);
System.out.println("所有工人搬运完毕,包工头检查搬运结果");
System.out.println("清点结果:"+list);
}
Java并发编程之CountDownLatch
最新推荐文章于 2024-07-14 22:18:32 发布