• 多线程编程(三)-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的值。

  • 相关阅读:
    读写锁操作(ReaderWriterLockSlim)
    VirtualBox的小秘密:命令行
    云的始祖概念,认识Linux瘦客户机
    Flash ActionScript 3.0 通过asp.net 访问 数据库
    js刷新iframe框架的几种情况分析
    Mozilla两款火狐插件包含恶意代码被紧急喊停
    asp.net中DataBinder.Eval的用法总结
    实现firebird的Embedded模式(.net 3.5)
    Flash Player 9 支持H.264视频和aac音频(附官方代码)
    右下角浮动广告代码DEMO
  • 原文地址:https://www.cnblogs.com/niceplay/p/6474751.html
Copyright © 2020-2023  润新知