zoukankan      html  css  js  c++  java
  • java多线程系列8 高级同步工具(2)CountDownLatch

    CountDownLatch,计数器的初始值为线程的数量。每当一个线程完成了自己的任务后,

    计数器的值就会减1。当计数器值到达0时,它表示所有的线程已经完成了任务,

    然后在闭锁上等待的线程就可以恢复执行任务。  

    应用场景:多个线程同时工作,然后其中几个可以随意并发执行,但有一个线程需要等其他线程工作结束后,才能开始。

    举个例子,开启多个线程分块处理很多数据,每个线程只处理一部分,最后由另外一个线程来汇总,

    那么这时候我们可以考虑使用CountDownLatch来控制并发。

    public class CountDownTest implements Runnable {
    	static CountDownLatch countDownLatch = new CountDownLatch(3);
    
    	@Override
    	public void run() {
    		try {
    			Thread.sleep(1000);
    		} catch (InterruptedException e) {
    			e.printStackTrace();
    		}
    		System.out.println(Thread.currentThread().getName() + " 完成一部分");
    		countDownLatch.countDown();
    	}
    
    	public static void main(String[] args) {
    
    		CountDownTest t = new CountDownTest();
    		ExecutorService srev = Executors.newCachedThreadPool();
    		for (int i = 0; i < 3; i++) {
    			srev.submit(t);
    		}
    		try {
    			countDownLatch.await(); // 及时通知
    		} catch (InterruptedException e) {
    			e.printStackTrace();
    		}
    		System.out.println("汇总完成");
    
    	}
    }
    

      运行结果如下    await() 后面的代码只有countDown() 到0 才会执行

         

  • 相关阅读:
    sysbench安装部署for postgresql
    sysbench安装部署for mysql
    pg创建dblink访问另外的库下的表
    11grac配置EM
    重新配置grid(ocr有备份,采用ocr备份进行恢复)
    rac资源显示脚本
    重新配置grid(已经有数据库的情况)ocr没有备份
    Can't locate Env.pm in @INC
    比特币-隔离见证(Segwit)
    传智播客 .NET面试宝典(2014版)
  • 原文地址:https://www.cnblogs.com/javabigdata/p/6905424.html
Copyright © 2011-2022 走看看