[多线程] 多线程工具之CountDownLatch
2021/10/11 6:18:10
本文主要是介绍[多线程] 多线程工具之CountDownLatch,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
前言
在Java中, 如何启动多个线程. 随后使某项任务分步执行.
使用Join方法
使用CountDownLatch
CountDownLatch 内核心方法:
- await(): 等待. 当count值为0时, 才能继续执行.
- countDown(): 和方法名一样. 具体作用时将方法名称-1.
- getCount(): 获取当前count值.
简单都小测试
import java.util.concurrent.CountDownLatch; public class TestJava { public static final CountDownLatch countDownLatch = new CountDownLatch(3); public static void main(String[] args) throws InterruptedException { Thread threadA1 = new Thread(new Runnable() { @Override public void run() { System.out.println("AThreadName: "+Thread.currentThread().getName()+" - "+ "count:"+ countDownLatch.getCount()); countDownLatch.countDown(); } }); Thread threadA2 = new Thread(new Runnable() { @Override public void run() { System.out.println("AThreadName: "+Thread.currentThread().getName()+" - "+ "count:"+ countDownLatch.getCount()); countDownLatch.countDown(); } }); Thread threadA3 = new Thread(new Runnable() { @Override public void run() { System.out.println("AThreadName: "+Thread.currentThread().getName()+" - "+ "count:"+ countDownLatch.getCount()); countDownLatch.countDown(); } }); threadA1.start(); threadA2.start(); threadA3.start(); // 等待3个线程都执行完成 countDownLatch.await(); Thread threadB1 = new Thread(new Runnable() { @Override public void run() { System.out.println("BThreadName: "+Thread.currentThread().getName()+" - "+ "count:"+ countDownLatch.getCount()); } }); Thread threadB2 = new Thread(new Runnable() { @Override public void run() { System.out.println("BThreadName: "+Thread.currentThread().getName()+" - "+ "count:"+ countDownLatch.getCount()); } }); threadB1.start(); threadB2.start(); } }
实现细节
CountDownLatch其实也是使用AQS对Java中锁的一种实现方式. 有空的话可以详细解读下具体实现.
Reference
这篇关于[多线程] 多线程工具之CountDownLatch的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享