使用CountDownLatch和CyclicBarrier的并发工具类
2021-03-02 21:21:06 0 举报
AI智能生成
并发工具类(CountDownLatch/CyclicBarrier)
作者其他创作
大纲/内容
阅读导航
线程 👉
CPU+JMM 👉
CAS+Volatile 👉
Synchronized 👉
JUC
locks锁+atomic原子类 👉
executor自定义线程池 👉
collections并发容器 👉
tools并发工具类
线程池 👉
ThreadLocal 👉
tools(并发工具类)
CountDownLatch
让一个或者多个线程阻塞,等待其他多个线程完成某件事情之后,被阻塞的线程才执行
场景:有一个任务想要往下执行,但必须要等到其他的任务执行完毕后才可以继续往下执行
使用
当一个或多个线程调用 await() 方法时,调用线程会被阻塞
当线程调用 countDown() 方法会将计数器减1,计数器为0时阻塞线程被唤醒(无法重置)
CyclicBarrier
允许一组线程互相等待,直到到达某个公共屏障点,在释放等待线程后可以重用
没有直接实现AQS而是借助ReentrantLock来实现的同步机制(可循环使用)
Semaphore
信号量主要用于多个共享资源的互斥使用,指定初始资源容量,也可以实现限流的功能
基于AQS实现,信号量也分公平和非公平的情况,访问特定资源前,先使用acquire(1)获得许可,如果
许可数量为0,该线程则一直阻塞,直到有可用许可;访问资源后,使用release()释放许可
许可数量为0,该线程则一直阻塞,直到有可用许可;访问资源后,使用release()释放许可
Phaser
一种可重用的同步屏障,功能上类似于CyclicBarrier和CountDownLatch,但使用上更为灵活。非常适用
于在多线程环境下同步协调分阶段计算任务(Fork/Join框架中的子任务之间需同步时,优先使用Phaser)
于在多线程环境下同步协调分阶段计算任务(Fork/Join框架中的子任务之间需同步时,优先使用Phaser)
Exchanger
线程间交换数据,允许两个线程在某个汇合点交换对象,在某些管道设计时比较有用
CompletableFuture
(优雅的使用并发)
(优雅的使用并发)
supplyAsync():用来开启一个有返回值的异步任务
代码举例
thenCompose():当第一个任务完成时才会执行第二个任务,开启新线程,最终结果由第二个任务返回
代码举例
thenCombine():两个异步任务全部完成时才会执行某些操作
代码举例
thenApply():与thenCompose类似,把多个任务串联起来处理,下一个任务会用到上一个任务的结果
代码举例
applyToEither():哪个任务先执行完,就取哪个结果返回
代码举例
关于作者
我的博客 👉
微信公众号 👉
GitHub 导航 👉
ProcessOn 主页 👉
0 条评论
下一页