• CountDownLatch


    CountDownLatch是什么

      countDownLatch 可以实现一个或者多个线程等待,直到其他线程中的一组操作完成的同步。countDownLatch 在初始化的时候。设定一个值,该值为0以后,释放被await阻塞的线程,这个值无法被重置。一个countDownLatch可以由一个线程阻塞多个线程,也可以由多个线程阻塞一个线程。

    CountDownLatch基本方法

      await方法:包含两种多态,1种是没有入参,直接将当前线程阻塞到计数器归零,或者线程被interrupted;另外一种是带有两个入参的,通过设置一个阻塞的时长,在线程被阻塞到计数器归零,或者等待的指定时间过去。

      countDown方法:减少计数器的值。如果计数器归零,释放所有等待的线程。如果当前计数大于零,则它将递减。 如果新计数为零,则所有等待的线程都将被重新启用以进行线程调度。

    countDownLatch用法示例

     1         Thread[] threads = new Thread[100];
     2         CountDownLatch latch = new CountDownLatch(threads.length);
     3         for (int i = 0; i < threads.length; i++) {
     4             threads[i] = new Thread(()->{
     5                 int result = 0;
     6                 for (int j = 0; j < 10000; j++) {
     7                     result +=j;
     8                 }
     9                 latch.countDown();
    10             });
    11         }
    12         
    13         for (int i = 0; i < threads.length; i++) {
    14             threads[i].start();
    15         }
    16         try {
    17             latch.await();
    18         } catch (Exception e) {
    19             e.printStackTrace();
    20         }
    21         System.out.println("end latch");
    22     

    countDownLatch 与join的区别

      countDownLatch 与join的功能类似,不同之处在于:join必须等到线程全部结束后,才能调起被阻塞的线程。而countDownLatch不需要等到线程结束,只需要执行过countDown方法后,就会将计数器减1,降到0以后,被阻塞线程即可运行。countDownLatch比join线程更加灵活。

  • 相关阅读:
    java中的各种Queue
    关闭线程的一些问题
    Exchanger
    文件锁FileLock
    StringBuffer和String需要注意的
    maven出现:Failed to execute goal on project ...: Could not resolve dependencies for project ...
    pringboot pom文件引入本地jar包和对其打jar包
    SpringBoot热部署的两种方式
    idea 自动导入包和自动将没用的包去除
    springCould:使用Feign 实现声明式服务调用
  • 原文地址:https://www.cnblogs.com/liyasong/p/countDownLatch.html
Copyright © 2020-2023  润新知