Java并发工具

Fork/Join
分治思想。
递归算法。
将大任务拆分(fork)成若干个小任务,后将小任务的执行结果向上汇总(join)。
Fork/Join中还有工作密取,当线程完成自己的任务后,可获取其他线程的任务执行,后返给被窃取线程以结果,减少大任务的处理速度,提高CPU利用率。
Fork/Join可以让任务同步或异步执行。同步invoke(),异步submit()/execute()。在Java中对应类是ForkJoinTask,这是一个抽象类,Java提供有RecursiveTask 和 RecursiveAction两个,前者泛型,有返回值;后者无返回值。具体任务逻辑在compute()中实现。

CountDownLatch–闭锁(控制器)
作用:让n个线程等待m个线程执行完各自工作后再执行。–主线程等待初始化工作完成后执行。利用CoutDownLatch设置计数器值,coutDown()扣减计数器值,当计数器为0时,唤醒await()等待中的主线程。

CyclicBarrier
cyclic是循环的意思,barrier是屏障的意思,作用是等所有它的await()方法通知其已到达屏障时,再一起放行,CyclicBarrier还有一个构造器,可启用一个单独的线程对协作线程做汇总等操作后,再放行协作线程。CyclicBarrier与CountDownLatch的区别在于前者的await()线程数与计数器扣减数一致,而后者与线程数无关,只要调用countDown()即可扣减。

Semaphore 信号量 用于流量控制,简称"流控",用于协调各线程共享资源。
acquire()获得执行许可证,release()放回许可证。典型应用:连接池,使用时需定义两个Semaphore,因为Semaphore的初始化指定许可证的数量,只是单纯的初始值,与后续放回无关。

Exchange 交换 用于两个线程之间交换数据。 jdk保证其交换线程安全。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值