CountDownLatch闭锁

2024-06-11 06:44
文章标签 countdownlatch 闭锁

本文主要是介绍CountDownLatch闭锁,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Java并发库提供了CountDownLatch类来实现这个功能。
CountDownLatch类是一个同步工具类,在完成某些运算时,只有其他所有的运算全部完成,当前运算才继续执行。

下面是一个案例来说明CountDownLatch:

说明:当前有 5 个线程做运算处理,主线程要计算这 5 个子线程执行所消耗的时长。那么CountDownLatch在主线程中一直等待这这 5 个线程执行完后,才执行主线程。每个子线程执行完后执行latch.countDown();也就是线程-1 的操作,直到线程数为 0 的时候,主线程才会执行,主线程执行latch.await();等待着。

public class CountDownLatchDemo {public static final Integer  THREAD_NUM = 5;public static void main(String[] args) {CountDownLatch countDownLatch = new CountDownLatch(THREAD_NUM);LatchDemo latchDemo = new LatchDemo(countDownLatch);long startTime = System.currentTimeMillis();for (int i = 0; i < THREAD_NUM; i++) {new Thread(latchDemo).start();}try {countDownLatch.await();} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println("消耗时间:" + (System.currentTimeMillis() - startTime)+ "ms");}
}
class LatchDemo implements Runnable {private CountDownLatch latch;public LatchDemo(CountDownLatch latch) {this.latch = latch;}@Overridepublic void run() {synchronized (this){try {for (int i = 0; i < 50000; i++) {if (i % 2 == 0){System.out.println(i+ "是偶数");}}} finally {latch.countDown();}}}
}

这篇关于CountDownLatch闭锁的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1050434

相关文章

【硬刚Java并发】JUC基础(四):CountDownLatch 闭锁

本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。 CountDownLatch Java 5.0 在 java.util.concurrent 包中提供了多种并发容器类来改进同步容器的性能。 CountDownLatch 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。 闭锁可以延迟线程的进度直

java 多线程 CountDownLatch、CyclicBarrier、Semaphore

在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法。   以下是本文目录大纲:   一.CountDownLatch用法   二.CyclicBarrier用法   三.Semaphore用法   若有不正之处请多多谅解,并欢迎批评指正。

CountDownLatch的应用与原理

一、什么是CountDownLatch CountDownLatch是具有synchronized机制的一个工具,目的是让一个或者多个线程等待,直到其他线程的一系列操作完成。 CountDownLatch初始化的时候,需要提供一个整形数字,数字代表着线程需要调用countDown()方法的次数,当计数为0时,线程才会继续执行await()方法后的其他内容。CountDownLatch(int

Java多线程之----CountDownLatch

有时候,会遇到这样一种情况,有多个任务,有一个主要任务需要等待其他子任务完成之后,才可以进行     而多线程中的CountDownLatch则提供了这样的功能,在初始化的时候,可以指定一个计数器,在每个子线程完成任务的时候减一,等到计数器为0的时候,那么,主线程才会进行     有这样的情景:要进行一次会议,会议要等到所有人都到齐了才可以开始,看下代码 public class

java多线程线程池 —— CountDownLatch线程计数器

ThreadPoolExecutor/ExecutorService:线程池,使用线程池可以复用线程,降低频繁创建线程造成的性能消耗,同时对线程的创建、启动、停止、销毁等操作更简便。 CountDownLatch是在java1.5被引入的,跟它一起被引入的并发工具类还有CyclicBarrier、Semaphore、ConcurrentHashMap和BlockingQueue,它们都存在于jav

【java并发】CountDownLatch

【应用场景】        有这样一种业务需求:需要几个线程完成之后,主线程才能继续。举个例子:车辆出厂,一辆车出厂,需要生产各个配件,并且安装,都完成后还需要质检,最后才可以出厂。类似这样的需求,我们可以考虑使用CountDownLatch来控制并发。 【CountDownLatch】        java.util.concurrent包有这样一个类,类似计数器,其内部维护着一个加锁的

Java 使用线程池和CountDownLatch分批插入或者更新数据

需求:在开发业务报表时,需要从MySQL数据库读取数据后进行操作,然后写入数据库,使用定时任务跑批。   分析:①兼顾性能,②  MySQL没有Oracle那么方便、强大的存储过程。综上所述,使用线程池以分批提交的方案把数据插入MySQL数据库,对于更新操作、在Java端进行分页等的操作,本方案也支持。代码如下: /*** 分页操作数据*/@Slf4j@Componentpubli

9、深入理解AQS之闭锁CountDownLatch

深入理解AQS之闭锁CountDownLatch CountDownLatch介绍CountDownLatch源码分析构造函数Sync-队列同步器await()-阻塞等待countDown()-释放锁资源总结 CountDownLatch介绍   CountDownLatch让一个或多个线程等待其他线程执行完成后再执行。在创建CountDownLatch对象时,必须指定线程数c

CountDownLatch的应用场景及实践

CountDownLatch是Java并发包(java.util.concurrent)中一个工具类,它可以帮助我们实现线程之间的同步和协作。CountDownLatch的核心思想是通过计数器来控制线程的执行顺序。当计数器的值降为0时,所有等待的线程都会被唤醒,然后开始执行后续操作。 CountDownLatch有且只有CountDownLatch(int count)一个构造器,并且你需要指定

多线程和并发库应用十五-CountDownLatch

CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能,当计数为0后 则执行 public class CountdownLatchTest {public static void main(String[] args) {ExecutorService service = Executors.newCachedThreadPool();f