标签:count sharp override err exception stack har string long
CountDownLatch 是一个同步工具,允许一个或多个线程 等待其他线程(一个或多个线程)完成一组操做。
CountDownLatch 中的方法不多:
| public CountDownLatch(int count) | 构造方法 | count 是同步计数的初始值 | 
| public void countDown() | 递减count值 | 递减计数器,每次减1,当count为0时,释放所有堵塞线程 | 
| public boolean await(long timeout, TimeUnit unit) | 堵塞线程 | 堵塞当前线程,直到count计数为0。 该方法有返回值:true 计数器=0, false 计数器>0 timeout:超时时间,当超过这个时间,将不再等待其他线程(不再堵塞当前线程) TimeUnit:等待时间的单为 | 
| public void await() | 堵塞线程 | 堵塞当前线程,直到count计数为0。 | 
| public long getCount() | 获取当前count计数 | 
例子:老板雇佣了10个工人,当10个工人都工作完后,通知老板来检查,然后发工资
先看执行结果:
老板分配工作 工人0:工作用了8分钟 工人5:工作用了8分钟 工人6:工作用了5分钟 工人4:工作用了5分钟 工人1:工作用了7分钟 工人3:工作用了6分钟 工人2:工作用了8分钟 工人8:工作用了8分钟 老板去吃饭,一会查看工作 工人7:工作用了7分钟 工人9:工作用了8分钟 工人4: 干完活 工人6: 干完活 工人3: 干完活 工人1: 干完活 工人7: 干完活 工人0: 干完活 工人2: 干完活 工人9: 干完活 工人5: 干完活 工人8: 干完活 老板发工资了!!!!
示例代码:
public class CountdownLatchTest1 {
    public static void main(String[] args) {
        // 雇佣人数
        int workCount = 10;
        CountDownLatch countDownLatch = new CountDownLatch(workCount);
        System.out.println("老板分配工作");
        for (int i = 0; i < workCount; i++) {
            Thread thread = new Thread("工人" + i) {
                @Override
                public void run() {
                    workTime();
                    System.out.println(Thread.currentThread().getName() + ": 干完活");
                    countDownLatch.countDown();
                }
            };
            // 开始工作
            thread.start();
        }
        try {
            System.out.println("老板去吃饭,一会查看工作");
            // 等待其他工人工作完
            countDownLatch.await();
            // 通知老板发工资
            money();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    /**
     * 随机计算工人的工作时间
     */
    public static void workTime() {
        try {
            int sleep = (int) (5 + Math.random() * (5 - 1 + 1));
            System.out.println(Thread.currentThread().getName() + ":工作用了" + sleep + "分钟");
            TimeUnit.SECONDS.sleep(sleep);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    /**
     * 发工资
     */
    public static void money() {
        System.out.println("老板发工资了!!!!");
    }
}
     
    
     
    
标签:count sharp override err exception stack har string long
原文地址:https://www.cnblogs.com/zhangXingSheng/p/13677639.html