• 多线程 闭锁CountDownLatch


      在下面的代码中,由于多线程并行的原因,可能主线程的耗时计算早就执行完了,而上面的线程还在打印,因此不能正确计算耗时时间。

    public class JavaDemo {
        public static void main(String[] args) throws ParseException {
    
            long begin = System.currentTimeMillis();
    
            LatchDemo ld = new LatchDemo();
    
            for (int i = 0; i < 5; i++) {
                new Thread(ld).start();
            }
    
            long end = System.currentTimeMillis();
    
            System.out.println("耗时:" + (end - begin));
    
        }
    }
    
    class LatchDemo implements Runnable {
    
        @Override
        public void run() {
    
            for (int i = 0; i < 50000; i++) {
                System.out.println(i);
            }
    
        }
    }

      引入闭锁机制,在指定个数的线程没执行完之前,不会继续执行后面的代码

    public class JavaDemo {
        public static void main(String[] args) throws ParseException {
    
            CountDownLatch latch = new CountDownLatch(5);
            LatchDemo ld = new LatchDemo(latch);
    
            long begin = System.currentTimeMillis();
            for (int i = 0; i < 5; i++) {
                new Thread(ld).start();
            }
    
            //countdown为0之前将一直等待
            try {
                latch.await();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            long end = System.currentTimeMillis();
    
            System.out.println("耗时:" + (end - begin));
    
        }
    }
    
    class LatchDemo implements Runnable {
    
        private CountDownLatch latch;
    
        public LatchDemo(CountDownLatch latch) {
            this.latch = latch;
        }
    
        @Override
        public void run() {
            try {
                synchronized (this) {
                    for (int i = 0; i < 50000; i++) {
                        System.out.println(i);
                    }
                }
            } finally {
                latch.countDown();
            }
            
        }
    }

      正确计算耗时,控制台打印

    ......
    49997
    49998
    49999
    耗时:1262
    
    Process finished with exit code 0
  • 相关阅读:
    前端接口设计
    前端协作流程
    编写jQuery插件
    jQuery插件之validation插件
    深入理解ajax系列第九篇——jQuery中的ajax
    前端学PHP之Smarty模板引擎
    第3选择-解决所有难题的关键思维,种下好的种子避免落入钻石交易
    阿里BCG重磅报告《人工智能,未来致胜之道》
    关于web开发前端h5框架的选择
    html5+php实现文件的断点续传ajax异步上传
  • 原文地址:https://www.cnblogs.com/noyouth/p/12809433.html
Copyright © 2020-2023  润新知