zoukankan      html  css  js  c++  java
  • JUC 一 CountDownLatch(闭锁)

    java.util.concurrent

    介绍

    CountDownLatch是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待

    1. CountDownLatch countDownLatch = new CountDownLatch(int count);
    2. boolean await(long timeout, TimeUnit unit)能够阻塞线程,直到调用N次countDownLatch.countDown()方法才立刻返回true值,释放线程。使当前线程在锁存器倒计数至零之前一直等待,除非线程被中断或超出了指定的等待时间。
    3. void countDown()可以在多个线程中调用 ,计算调用次数是所有线程调用次数的总和。如果计数到达零,则释放所有等待的线程。如果当前计数大于零,则将计数减少。

    调用了countDown()方法,在当前计数到达零之前,await()方法会一直受阻塞。之后,会释放所有等待的线程,await()的所有后续调用都将立即返回true

    使用场景

    1. 在一些应用场合中,需要等待某个条件达到要求后才能做后面的事情
    2. 当线程都完成后触发事件,以便进行后面的操作。

    示例

    public class CountDownLatch {
        public static void main(String[] args) {
    
            final CountDownLatch latch = new CountDownLatch(10);
    
            Demo ld = new Demo(latch);
    
            // 创建10个线程
            for (int i = 0; i < 10; i++) {
                new Thread(ld).start();
            }
    
            latch.await();
    
            System.out.println("该我了");
        }
    }
    
    class Demo implements Runnable {
        private CountDownLatch latch;
    
        // 有参构造器
        public Demo(CountDownLatch latch) {
            this.latch = latch;
        }
    
        public void run() {
            synchronized (this) {
                latch.countDown();
            }
        }
    }
    }
    
  • 相关阅读:
    [转载]网络流ISAP算法的简单介绍
    [漫画]120430 混血男孩
    [代码]SGU 270 Thimbles
    [代码]UVALive 5882 Racing Car Trail
    [代码]SGU 298 King Berl VI
    [解题报告]Codeforces 105D Entertaining Geodetics
    07年的第一个小时
    简单工厂模式
    讨厌什么
    休息像神的味道
  • 原文地址:https://www.cnblogs.com/loveer/p/11409961.html
Copyright © 2011-2022 走看看