[核心技术36问]19.Java并发包提供了哪些并发工具类?

Java并发包提供了哪些并发工具类?

    我们常说的并发工具包就是java.util.concurrent及其子包,集中了Java并发的各种基础工具类,其中主要包括以下几个方面:

  1. 提供了比synchronized更加高级的各种同步结构,包括CountDownLatch、CyclicBarrier、Semaphore等,可以实现更加丰富的多线程操作,比如利用semaphore作为资源控制器,限制同时进行工作的线程数量;
  2. 各种线程安全的容器,比如最常见的ConcurrentHashMap、有序的ConcurrentSkipListMap,或者通过类似快照机制,实现线程安全的动态数组CopyOnWriteArrayList等;
  3. 各种并发队列实现,如各种BlockingQueue实现,比较典型的ArrayBlockingQueue、SynchorousQueue或针对特定场景的PriorityBlockingQueue等;
  4. 强大的Executor框架,可以创建各种不同类型的线程池,调度任务运行等,绝大部分情况下,不再需要自己从头实现线程池和任务调度器。

CountDownLatch:允许一个或多个线程等待某些操作完成;

CyclicBarrier:一种辅助性的同步结构,允许多个线程等待到达某个屏障;

Semaphore:java版本的信号量实现。

♦CountDownLatch和CyclicBarrier

CountDownLatch是不可以重置的,所以无法重用,而CyclicBarrier没有这种限制,可以重用;

CountDownLatch基本操作组合是countDown()和await(),调用await()的线程阻塞等待countDown足够的次数,不管你是在一个线程还是多个线程里countDown,只要次数足够即可。CountDownLatch操作的是事件;

而CyclicBarrier的基本操作组合是await(),当所有的伙伴都调用了await(),才会继续进行任务,并自动进行重置。注意,正常情况下,CyclicBarrier的重置是自动发生的,如果我们调用reset()方法,但还有线程在等待,就会导致等待线程被打扰,抛出BrokenBarrierException异常。CyclicBarrier侧重点是线程,而不是调用事件,它的典型应用场景是用来等待并发结束。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值