CountDownLatch 多线程使用示例

Stella981
• 阅读 445

场景描述:

模拟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
3年前
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
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
java 线程篇 之CyclicBarrier、CountDownLatch、Semaphore
java提供了很多控制线程到达某一状态导致之前阻塞线程运行的函数,这些在控制任务执行提供了很大的便利,比如在zookper使用Semaphore实现分布式锁1、CountDownLatchcountDownLatch提供await(),CountDownLatch()来控制,前面我很多例子,使用这个来模拟多线程运行的,所以这里不过多介绍2
Wesley13 Wesley13
3年前
java并发中CountDownLatch的使用
java并发中CountDownLatch的使用在java并发中,控制共享变量的访问非常重要,有时候我们也想控制并发线程的执行顺序,比如:等待所有线程都执行完毕之后再执行另外的线程,或者等所有线程都准备好了才开始所有线程的执行等。这个时候我们就可以使用到CountDownLatch。简单点讲,CountDownLatch存有一个放在QueuedS
Wesley13 Wesley13
3年前
java多线程测试性能,总线程使用总时间。
前段时间在做java多线程,然后涉及到了一个效率的问题。  java多线程中,所有线程执行完毕,总共使用多少时间呢?importjava.util.concurrent.CountDownLatch;  countDwonlatch提供了最常用的一些测试方法。创建一个countDownLatch对象:CountDown
Wesley13 Wesley13
3年前
java多线程实现的三种方式
JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。1、继承Thread类实现多线程继承Thread类的方法尽管被我列为一种多线程实现方式,但Thread本质上也是实现
Stella981 Stella981
3年前
CountDownLatch、CyclicBarrier 的对比
CountDownLatch、CyclicBarrier都可以用于:在多线程异步执行过程中,执行预定的流程后唤醒指定的线程进行相应的操作.区别:1,CountDownLatch唤醒过一次,就废弃了;CyclicBarrier可以重复之前的预定流程,反复唤醒。2,CountDownLatch可用于唤醒主线程,异步线程\任意线程,
Stella981 Stella981
3年前
CounDownLatchDemo
packagecom.my.demo;importjava.util.concurrent.CountDownLatch;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;/
Wesley13 Wesley13
3年前
Java中的多线程
线程安全和同步线程安全:经常用来描绘一段代码。指在并发的情况之下,该代码经过多线程使用,线程的调度顺序不影响任何结果。这个时候使用多线程,我们只需要关注系统的内存,cpu是不是够用即可。反过来,线程不安全就意味着线程的调度顺序会影响最终结果,如不加事务的转账代码:voidtransferMoney(U
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_