zoukankan      html  css  js  c++  java
  • Java 多线程系列 CountDownLatch

    CountDownLatch

    一个或多个线程等待其他线程完成操作后在在执行

    CountDownLatch通过一个计数器来实现,await方法阻塞直到 countDown() 调用计数器归零之后释放所有等待的线程,并且任何后续的await调用立即返回。这是一次性现象 - 计数无法重置。如果您需要重置计数的版本,请考虑使用CyclicBarrier。

    
    public class WorkerRunnable implements Runnable {
    
        private CountDownLatch countDownLatch;
        private int i;
    
        public WorkerRunnable(CountDownLatch latch, int i) {
            this.countDownLatch = latch;
            this.i = i;
        }
    
        @Override
        public void run() {
            doWork();
            this.countDownLatch.countDown();
        }
    
        private void doWork() {
            System.out.println("当前的线程: " + i);
        }
    }
    
    public class Client {
    
        public static void main(String[] args) throws InterruptedException {
            final int n = 10;
            CountDownLatch doneSignal = new CountDownLatch(n);
            ExecutorService executor = Executors.newFixedThreadPool(10);
    
            for (int i = 0; i < n; i++) {
                executor.execute(new WorkerRunnable(doneSignal, i));
            }
    
            doneSignal.await();
            System.out.println("结束");
        }
    }
    

    out

    当前的线程: 7
    当前的线程: 6
    当前的线程: 2
    当前的线程: 1
    当前的线程: 9
    当前的线程: 0
    当前的线程: 5
    当前的线程: 4
    当前的线程: 8
    当前的线程: 3
    结束
    
  • 相关阅读:
    Java实现批量下载《神秘的程序员》漫画
    mysql远程连接:ERROR 1130 (HY000): Host '*.*.*.*' is not allowed to connect to this MySQL server解决办法
    opencv学习_15 (利用cmake查看opencv的源码)
    jobs 命令
    中断子系统6_中断嵌套处理
    JPA一对多映射
    JPA Map映射
    JPA集合映射
    JPA删除实体
    JPA查找实体
  • 原文地址:https://www.cnblogs.com/warrior/p/9703988.html
Copyright © 2011-2022 走看看