美文网首页Java 杂谈
⌈Java⌋ 使用CountDownLatch实现发起高并发请求

⌈Java⌋ 使用CountDownLatch实现发起高并发请求

作者: 皓尘埃 | 来源:发表于2018-12-28 16:17 被阅读1次

    单刀直入

    void test() {
        /**
         * CountDownLatch在创建的时候需要传入一个大于或者等于的0的整数,该数会赋值给内部的一个计数器属性
         * 当计数器大于0时,可以调用await()方法对当前线程造成等待
         * 调用countDown()方法对计数器进行减一的操作
         * 当计数器等于0时,所有被await()方法造成等待的线程会同时开始继续运行
         */
    CountDownLatch countDownLatch = new CountDownLatch(1);
        for (int i = 0; i < 10; i++) {
            // 把CountDownLatch作为参数,创建好线程类并开启运行
            new Thread(new MyThread(countDownLatch)).start();
            System.*out*.println("创建好第"+i+"个线程。");
        }
        // 对计数器减一,使所有等待状态的线程继续运行
        countDownLatch.countDown();
    }
    
    /**
     * 创建一个实现Runnable接口的线程类,
     * 定义一个用于接收实现等待的CountDownLatch类型的私有属性
     */
    class MyThread implements Runnable {
        private final CountDownLatch countDownLatch;
    
        MyThread(CountDownLatch countDownLatch) {
            this.countDownLatch = countDownLatch;
        }
    
        public void run() {
            try {
                // 在希望实现并发操作步骤之前调用await()实现等待
                countDownLatch.await();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            // 实现并发的操作
            System.*out*.println(Thread.*currentThread*().getName() + " - " +System.*currentTimeMillis*());
        }
    }
    
    
    

    输出日志

    创建好第0个线程。
    创建好第1个线程。
    创建好第2个线程。
    创建好第3个线程。
    创建好第4个线程。
    创建好第5个线程。
    创建好第6个线程。
    创建好第7个线程。
    创建好第8个线程。
    创建好第9个线程。
    Thread-0 - 1545984867890
    Thread-4 - 1545984867890
    Thread-5 - 1545984867890
    Thread-2 - 1545984867890
    Thread-7 - 1545984867890
    Thread-8 - 1545984867891
    Thread-1 - 1545984867890
    Thread-9 - 1545984867891
    Thread-6 - 1545984867890
    Thread-3 - 1545984867890
    

    小结

    当执行了countDownLatch.countDown()之后,计数器由1变为0,同时就触发了多个之前被await等待的线程同时执行,也就实现了瞬时的并发操作。

    相关文章

      网友评论

        本文标题:⌈Java⌋ 使用CountDownLatch实现发起高并发请求

        本文链接:https://www.haomeiwen.com/subject/bgcelqtx.html