CountDownLatch

作者: 被丢掉的咸鱼 | 来源:发表于2022-08-23 15:17 被阅读0次

    CountDownLatch允许一个或者多个线程去等待其他线程完成操作。

    public CountDownLatch(int count) 构造一个使用给定计数初始化的 CountDownLatch
    

    await()

    使当前线程等待直到锁存器倒计时到零,除非线程被中断。
    如果当前计数为零,则此方法立即返回。
    如果当前计数大于零,则当前线程出于线程调度目的而被禁用并处于休眠状态,直到发生以下两种情况之一:
    由于调用 countDown 方法,计数达到零;
    或其他一些线程中断当前线程。
    如果当前线程:
    在进入此方法时设置了其中断状态;
    或在等待时被打断然后抛出 InterruptedException 并清除当前线程的中断状态。
    如果经过指定的等待时间,则返回值 false。
    如果时间小于或等于零,则该方法根本不会等待。

    countDown()

    减少锁存器的计数,如果计数达到零,则释放所有等待线程。如果当前计数大于零,则递减。如果新计数为零,则重新启用所有等待线程以进行线程调度。如果当前计数为零,则不会发生任何事情。

    getCount()

    返回当前计数。此方法通常用于调试和测试目的。

    Demo

    public class CountDownLatch_learn {
    
        public static void main(String[] args) {
            // 让2个线程去等待2个三个工作线程执行完成
            final CountDownLatch latch = new CountDownLatch(2);
            ExecutorService executorService = Executors.newFixedThreadPool(3);
            Thread thread = new Thread(() -> {
                System.out.println("1111 continue running1...");
                    try {
                        Thread.sleep(4000);
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                latch.countDown();
                System.out.println("1111 continue running2...");
            });
    //        executorService.submit(thread);
            Thread thread2 = new Thread(() -> {
                System.out.println("2222 continue running1...");
                    try {
                        Thread.sleep(2000);
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                latch.countDown();
                System.out.println("2222 continue running2...");
            });
    //        executorService.submit(thread2);
    
            System.out.println("3333 continue running2...");
            thread.start();
            thread2.start();
    
            Runnable runnable = () -> {
                try {
                    latch.await();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                    System.out.println("777 continue running2...");
                }
                System.out.println("4444 continue running2...");
    //            executorService.shutdown();
                System.out.println("5555 continue running2...");
            };
            new Thread(runnable).start();
    
        }
    
    }
    
    

    相关文章

      网友评论

        本文标题:CountDownLatch

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