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

本文详细介绍Java并发工具包java.util.concurrent提供的关键并发工具类,包括CountDownLatch、CyclicBarrier、Semaphore等高级同步结构,ConcurrentHashMap等线程安全容器,以及各种BlockingQueue实现和Executor框架。并对比了CountDownLatch和CyclicBarrier的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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侧重点是线程,而不是调用事件,它的典型应用场景是用来等待并发结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值