zoukankan      html  css  js  c++  java
  • 多线程编程(三)-CountDownLatch的使用

    • CountDownLatch的介绍

        类CountDownLatch是同步功能得一个辅助类,使用效果就是给定一个计数,当使用CountDownLatch类的线程判断计数不为0时,则呈wait状态,如果是0则继续运行。

        实现等待与继续运行的效果分别需要使用awit()和countDown()方法来进行。调用awit()方法时判断计数是否为0,如果不为0则呈等待状态。其他线程可以调用countDown()方法将计数减1,当计数减到0时,呈等待的线程继续运行。需要特别说明的是,计数无法被重置。

    • 实例

        模拟田径比赛,运动员准备

      

    package com.wjg.unit_2_1_2;
    
    import java.util.concurrent.CountDownLatch;
    
    public class Run {
        public static void main(String[] args) throws InterruptedException {
            CountDownLatch maxRunner = new CountDownLatch(10);
            Run run = new Run();
            for (int i = 0; i < maxRunner.getCount(); i++) {
                MyThread thread = run.new MyThread(maxRunner);
                thread.setName("运动员"+(i+1));
                thread.start();
            }
            maxRunner.await();
            System.out.println("全部到了");
            
        }
        
        public class MyThread extends Thread{
            private CountDownLatch maxRunner;
    
            public MyThread(CountDownLatch maxRunner) {
                super();
                this.maxRunner = maxRunner;
            }
    
            @Override
            public void run() {
                try {
                    Thread.sleep(2000);
                    System.out.println(this.getName()+"到了");
                    maxRunner.countDown();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                
            }
            
            
        }
    }


    运行结果:

    运动员4达到了
    运动员5达到了
    运动员2达到了
    运动员10达到了
    运动员3达到了
    运动员9达到了
    运动员8达到了
    运动员1达到了
    运动员7达到了
    运动员6达到了

    全部到了    
    • 方法awit(long timeout,TimeUnit unit)

        作用是使线程在指定的最大时间单位内进入WAITING状态,如果超过这个时间则自动唤醒,程序继续向下执行。    

    • 方法getCount()

        获取当前CountDownLatch的值。

  • 相关阅读:
    Linux工具[转]
    [C++]线程池 与 [Go] mapreduce
    快手面试代码题
    C++ note
    sudo与用户权限
    service 与 log日志
    tmux-cheatsheet
    [转]Linux下的常见信号总结
    记一个低级错误
    Github个人主页不显示提交记录的问题
  • 原文地址:https://www.cnblogs.com/niceplay/p/6474751.html
Copyright © 2011-2022 走看看