Java中的并发工具类CountDownLatch

Java (36) 2024-02-09 08:12

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说Java中的并发工具类CountDownLatch,希望能够帮助你!!!。

Java中的并发工具类CountDownLatch_https://bianchenghao6.com/blog_Java_第1张

Java中的并发工具类

在多线程编程的时候,有时候需要控制并发流,Java本身提供了几个控制并发的工具类,比如CountDownLatch,CyclicBarrier,Semaphore等。

1、CountDownLatch允许一个或者多个线程等等其他线程完成。如果有个会议,等所有的人到了才能开始,假如每个人都是一个线程,开会需要等待每个线程结束。

CountDownLatch.countDown()这个方法是CountDownLatch会把计数器的值减1,CountDownLatch.await()等待计数器为0时才会执行下面的代码。

Java中的并发工具类CountDownLatch_https://bianchenghao6.com/blog_Java_第2张

CountDownLatch

输出结果如下,等所有的线程结束,才会往下执行。

大家好,报道3

大家好,报道2

大家好,报道1

大家好,报道5

大家好,报道4

大家好,报道9

大家好,报道10

大家好,报道8

大家好,报道7

大家好,报道6

大家好,报道13

大家好,报道12

大家好,报道11

大家好,报道17

大家好,报道16

大家好,报道15

大家好,报道20

大家好,报道14

大家好,报道19

大家好,报道18

人已到齐,开始开会!

2、CyclicBarrier同步屏障。可以循环使用的屏障,让一组线程到达一个屏障时被阻塞,等到最后一个线程到达屏障时才会开门。用这个CyclicBarrier实现上面的需求,有几处地方需要修改,最主要的是CountDownLatch换成了CyclicBarrier,CyclicBarrier的构造方法里的参数表示要拦截的数量,这里是21包括主线程。再就是把原来的线程池换成了不限制数量的,如果最大是10个线程,这个程序永远不会执行完毕。输出的结果和上次一样。

Java中的并发工具类CountDownLatch_https://bianchenghao6.com/blog_Java_第3张

CyclicBarrier同步屏障

3、Semaphore信号量。Semaphore用来控制同时访问资源的线程数量,比如用来限制流量,限制并发数等。acquire()方法是获取一个通行证,releas()方法是归还通行证。比如进小区的安检,只能一个一个的来,代码实现如下。

Java中的并发工具类CountDownLatch_https://bianchenghao6.com/blog_Java_第4张

Semaphore信号量

这几个都是面试中可能问到的,先了解下。

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

发表回复