一、什么是countDownlatch CountDownLatch是一个同步工具类,它通过一个计数器来实现的,初始值为线程的数量。每当一个线程完成了自己的任务,计数器的值就相应得减1。当计数器到达0
CountDownLatch是一个同步工具类,它通过一个计数器来实现的,初始值为线程的数量。每当一个线程完成了自己的任务,计数器的值就相应得减1。当计数器到达0时,表示所有的线程都已执行完毕,然后在等待的线程就可以恢复执行任务。
1. 某个线程需要在其他n个线程执行完毕后再向下执行2. 多个线程并行执行同一个任务,提高响应速度
public class CountDownLaunchTest { public static void main(String[] args) throws InterruptedException { List list = new ArrayList(); for(int i = 1; i<=100; i++){ list.add(i); } Long start = System.currentTimeMillis(); for(int i = 0; i<list.size(); i++){ Thread.sleep(100); } System.out.println("=====同步执行:耗时"+(System.currentTimeMillis()-start)+"毫秒======"); Long start1 = System.currentTimeMillis(); CountDownLatch latch = new CountDownLatch(10); for(int i = 0; i<latch.getCount(); i++){ new Thread(new Test(latch, i, list)).start(); } latch.await(); System.out.println("=====异步执行:耗时"+(System.currentTimeMillis()-start1)+"毫秒======"); } static class Test implements Runnable{ private CountDownLatch latch; private int i; private List list; Test(CountDownLatch latch, int i, List list){ this.latch = latch; this.i = i; this.list = list; } @SneakyThrows @Override public void run() { for(int a = i*10; a<(i+1)*10; a++){ // 执行任务逻辑 Thread.sleep(100); } latch.countDown(); } }}
执行结果:
注:如果多个线程并行执行一个任务,则初始count值必须与启动线程数保持一致,即count为10,则必须开启10 个异步线程
来源地址:https://blog.csdn.net/liu_da_da/article/details/124983187
--结束END--
本文标题: CountDownLatch详解以及用法示例
本文链接: https://www.lsjlt.com/news/403354.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-04-01
2024-04-03
2024-04-03
2024-01-21
2024-01-21
2024-01-21
2024-01-21
2023-12-23
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0