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读源码之CountDownLatch


下一篇:jsp简单标签开发(一)