java并发工具类
1、CountDownLatch :能够使一个或多个线程等待其他线程完成各自的工作后再执行
2、CyclicBarrier : 让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续运行。
3、Semaphore : 用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理地使用公共资源
4、Exchanger : 用于线程间协作的工具类
1、CountDownLatch(倒计时 门栓):让一些线程阻塞直到另一些线程完成一系列操作后才唤醒。
白话理解:比如一辆拉客面包车,车里能做5个人,司机等到5个都坐上来了才可以发车。
实现:它通过调用await方法让线程进入阻塞状态等待倒计时0时唤醒。
它通过线程调用countDown方法让倒计时中的计数器减去1,当计数器为0时,会唤醒哪些因为调用了await而阻塞的线程。
底层实现:底层是使用AQS实现的
案列:假设老板开一个紧急会议,他先到会议室等着所有人签到然后开始开会,可以使用CountDownLatch进行模拟。
public static void main(String[] args) {
CountDownLatch countDownLatch=new CountDownLatch(5);
for (int i=1;i<=5;i++){
new Thread(()->{
System.out.println(Thread.currentThread().getName()+"签到!");
countDownLatch.countDown();
},"第"+i+"个人").start();
}
try {
countDownLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("老板宣布人够了开始开会!");
}
运行结果如下:
第1个人签到!
第2个人签到!
第5个人签到!
第4个人签到!
第3个人签到!
老板宣布人够了开始开会!
重点:当多线程并发情况下,如果有四个线程,前三个线程并发执行完才可以执行最后一个线程,那么可以使用CountDownLatch来实现
其他博客参考:https://www.cnblogs.com/wangsen/p/11170709.html
来源:CSDN
作者:工作QQ感冒的石头
链接:https://blog.csdn.net/qq_39291929/article/details/103753441