zoukankan      html  css  js  c++  java
  • CountDownLatch的使用

    通俗的讲就是,CountDownLatch相当于一扇大门,在大门打开之前所有线程都被阻断,一旦大门打开所有线程都将通过,但是一旦大门打开,所有线程都通过了,那么这个CountDownLatch的状态就失效了,门的状态也就不能变了,只能是打开状态。也就是说CountDownLatch的状态是一次性的

    public class CountDownLatchDemo {
        
        final static SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
    
        public static void main(String[] args) throws InterruptedException {
            CountDownLatch latch = new CountDownLatch(2);// 两个工人的协作
            Worker worker1 = new Worker("zhangsan", 5000, latch);
            Worker worker2 = new Worker("lisi", 8000, latch);
            worker1.start();//
            worker2.start();//
            latch.await();// 等待所有工人完成工作
            System.out.println("all work done at " + sdf.format(new Date()));
        }
    
        static class Worker extends Thread {
            String workerName;
            int workTime;
            CountDownLatch latch;
    
            public Worker(String workerName, int workTime, CountDownLatch latch) {
                this.workerName = workerName;
                this.workTime = workTime;
                this.latch = latch;
            }
    
            public void run() {
                System.out.println(workerName + " start at " + sdf.format(new Date()));
                doWork();// 工作了
                System.out.println( workerName + " complete at " + sdf.format(new Date()));
                latch.countDown();// 工人完成工作,计数器减一
    
            }
    
            private void doWork() {
                try {
                    Thread.sleep(workTime);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
  • 相关阅读:
    1.8 接口中的静态方法
    1.7 默认方法
    1.6 变量作用域
    汉字转拼音
    1.5 构造器引用
    1.4 方法引用
    循环中冲不掉外部定义的变量
    getBoundingClientRect
    Angular1.0 在Directive中调用Controller的方法
    horizontalDragMaxWidth:0;就没有水平滚动条了
  • 原文地址:https://www.cnblogs.com/moris5013/p/10905693.html
Copyright © 2011-2022 走看看