CountDownLatch 多线程使用示例

Stella981
• 阅读 291

场景描述:

模拟10个线程,并发执行,最后汇总结果

代码:

package com.jf.service.market.impl;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class CountDownLatchTest {
    
   public static void main(String[] args) {
        int num = 10;
        long time = System.currentTimeMillis();
        ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
        final CountDownLatch latch = new CountDownLatch(num);
        for (int i = 0; i < 10; i++) {
            cachedThreadPool.execute(new Runnable() {
                public void run() {
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println(" End=== Thread:"+Thread.currentThread().getId()); 
                    latch.countDown();
                }
            });
        }
        try {
            latch.await();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("总共耗时:" + (System.currentTimeMillis()-time));
        cachedThreadPool.shutdown();
    }
}

结果展示:

 End=== Thread:10
 End=== Thread:15
 End=== Thread:17
 End=== Thread:16
 End=== Thread:14
 End=== Thread:13
 End=== Thread:12
 End=== Thread:9
 End=== Thread:11
 End=== Thread:18
总共耗时:1008

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
2年前
java 线程篇 之CyclicBarrier、CountDownLatch、Semaphore
java提供了很多控制线程到达某一状态导致之前阻塞线程运行的函数,这些在控制任务执行提供了很大的便利,比如在zookper使用Semaphore实现分布式锁1、CountDownLatchcountDownLatch提供await(),CountDownLatch()来控制,前面我很多例子,使用这个来模拟多线程运行的,所以这里不过多介绍2
Wesley13 Wesley13
2年前
java并发中CountDownLatch的使用
java并发中CountDownLatch的使用在java并发中,控制共享变量的访问非常重要,有时候我们也想控制并发线程的执行顺序,比如:等待所有线程都执行完毕之后再执行另外的线程,或者等所有线程都准备好了才开始所有线程的执行等。这个时候我们就可以使用到CountDownLatch。简单点讲,CountDownLatch存有一个放在QueuedS
Wesley13 Wesley13
2年前
java多线程测试性能,总线程使用总时间。
前段时间在做java多线程,然后涉及到了一个效率的问题。  java多线程中,所有线程执行完毕,总共使用多少时间呢?importjava.util.concurrent.CountDownLatch;  countDwonlatch提供了最常用的一些测试方法。创建一个countDownLatch对象:CountDown
Wesley13 Wesley13
2年前
java多线程实现的三种方式
JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。1、继承Thread类实现多线程继承Thread类的方法尽管被我列为一种多线程实现方式,但Thread本质上也是实现
Stella981 Stella981
2年前
CountDownLatch、CyclicBarrier 的对比
CountDownLatch、CyclicBarrier都可以用于:在多线程异步执行过程中,执行预定的流程后唤醒指定的线程进行相应的操作.区别:1,CountDownLatch唤醒过一次,就废弃了;CyclicBarrier可以重复之前的预定流程,反复唤醒。2,CountDownLatch可用于唤醒主线程,异步线程\任意线程,
Stella981 Stella981
2年前
CounDownLatchDemo
packagecom.my.demo;importjava.util.concurrent.CountDownLatch;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;/
Wesley13 Wesley13
2年前
Java中的多线程
线程安全和同步线程安全:经常用来描绘一段代码。指在并发的情况之下,该代码经过多线程使用,线程的调度顺序不影响任何结果。这个时候使用多线程,我们只需要关注系统的内存,cpu是不是够用即可。反过来,线程不安全就意味着线程的调度顺序会影响最终结果,如不加事务的转账代码:voidtransferMoney(U
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Wesley13 Wesley13
2年前
Java线程的join操作有什么作用?
计算机为了提升CPU使用效率和交互性而引入了并发机制,任务的执行也抽象成了线程,并发机制让一个CPU能够轮流执行多个线程,从宏观上看多个线程就像是同时执行一样。并发使得线程的执行顺序不容易控制,而实际工程中很多场景都会涉及某个线程需要依赖另外一个或几个线程的执行结果,这就要被依赖的线程需要先执行完,这时就需要join操作。比如下面的场景,假如要计算AB的结