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();
            }
        }
    }
    }
    
  • 相关阅读:
    LCS LIS
    补个线段树
    洛谷1522
    AC自动机
    WF 2017 I
    WF2017 E
    最小生成树计数 基尔霍夫矩阵树定理
    bitonic tour luogu1523
    code+11月月赛
    模拟退火
  • 原文地址:https://www.cnblogs.com/loveer/p/11409961.html
Copyright © 2011-2022 走看看