Java 核心技术面试精讲
杨晓峰
前 Oracle 首席工程师
125942 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 44 讲
Java 核心技术面试精讲
15
15
1.0x
00:00/00:00
登录|注册

第19讲 | Java并发包提供了哪些并发工具类?

PriorityBlockingQueue
SynchronousQueue
ArrayBlockingQueue
BlockingQueue
CopyOnWriteArrayList
ConcurrentSkipListMap
ConcurrentHashMap
Semaphore
CyclicBarrier
CountDownLatch
CopyOnWriteArrayList
ConcurrentSkipListMap
ConcurrentHashMap
Semaphore
CyclicBarrier
CountDownLatch
Executor框架
并发队列实现
线程安全容器
高级同步结构
一课一练
CopyOnWrite容器原理
线程安全Map、List和Set
丰富同步结构
实际使用经验
并发包了解程度
Executor框架
并发队列实现
线程安全容器
高级同步结构
使用CountDownLatch的同步结构解决实际问题
CopyOnWrite容器原理
线程安全Map、List和Set
CountDownLatch vs. CyclicBarrier
丰富同步结构
多线程编程目的
实际使用经验
并发包了解程度
java.util.concurrent及其子包
知识扩展
考点分析
并发工具类
一课一练
知识扩展
考点分析
典型回答
Java并发包
Java并发包提供了哪些并发工具类?
总结
参考文章

该思维导图由 AI 生成,仅供参考

通过前面的学习,我们一起回顾了线程、锁等各种并发编程的基本元素,也逐步涉及了 Java 并发包中的部分内容,相信经过前面的热身,我们能够更快地理解 Java 并发包。
今天我要问你的问题是,Java 并发包提供了哪些并发工具类?

典型回答

我们通常所说的并发包也就是 java.util.concurrent 及其子包,集中了 Java 并发的各种基础工具类,具体主要包括几个方面:
提供了比 synchronized 更加高级的各种同步结构,包括 CountDownLatch、CyclicBarrier、Semaphore 等,可以实现更加丰富的多线程操作,比如利用 Semaphore 作为资源控制器,限制同时进行工作的线程数量。
各种线程安全的容器,比如最常见的 ConcurrentHashMap、有序的 ConcurrentSkipListMap,或者通过类似快照机制,实现线程安全的动态数组 CopyOnWriteArrayList 等。
各种并发队列实现,如各种 BlockingQueue 实现,比较典型的 ArrayBlockingQueue、 SynchronousQueue 或针对特定场景的 PriorityBlockingQueue 等。
强大的 Executor 框架,可以创建各种不同类型的线程池,调度任务运行等,绝大部分情况下,不再需要自己从头实现线程池和任务调度器。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Java并发包提供了丰富的并发工具类,包括CountDownLatch、CyclicBarrier、Semaphore等高级同步结构,以及ConcurrentHashMap和ConcurrentSkipListMap等线程安全的容器。这些工具类可以帮助开发人员实现多线程操作、资源控制、线程安全的容器操作以及任务调度等功能。掌握并发包的核心功能对于多线程编程至关重要,而深入理解工具类的设计、实现和适用场景,以及熟练掌握典型的代码用例也是必不可少的。尽管并发包提供了丰富的工具,但在实际应用中很少有机会全面使用,因此建议开发人员着重掌握核心功能,并在实际场景中不断积累经验。通过掌握这些内容,开发人员可以更好地利用Java并发包来提高程序的扩展能力、协调线程间的交互以及传递数据和状态,从而更好地满足业务需求。文章还介绍了CountDownLatch、CyclicBarrier和Semaphore的基本操作组合及使用场景,以及ConcurrentHashMap和ConcurrentSkipListMap的选择原则。文章通过示例代码和逻辑分析,帮助读者更好地理解并发包的使用方法和注意事项。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Java 核心技术面试精讲》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(47)

  • 最新
  • 精选
  • 013
    1)CountDownLatch和CyclicBarrier都能够实现线程之间的等待,只不过它们侧重点不同: CountDownLatch一般用于某个线程A等待若干个其他线程执行完任务之后,它才执行; 而CyclicBarrier一般用于一组线程互相等待至某个状态,然后这一组线程再同时执行; 另外,CountDownLatch是不能够重用的,而CyclicBarrier是可以重用的。 2)Semaphore其实和锁有点类似,它一般用于控制对某组资源的访问权限。

    作者回复: 不错

    2018-11-29
    94
  • Daydayup
    CountDownLatch最近还真用上了。我的需求是每个对象一个线程,分别在每个线程里计算各自的数据,最终等到所有线程计算完毕,我还需要将每个有共通的对象进行合并,所以用它很合适。

    作者回复: 合适的场景

    2018-06-22
    6
    42
  • 扫地僧的功夫梦
    17讲的问题,留言有点晚,老师可能不会看,想得到老师的回复:调用notify()/notifyAll()方法后线程是处于阻塞状态吧,因为线程还没获取到锁。

    作者回复: 是说调用notify的那个线程的状态吗? 不是的,这里有很多方面: 阻塞一般发生在进入同步块儿时; notify并不会让出当前的monitor; 可以用wait释放锁,但是进入waiting状态。 不建议靠记忆去学习,类似问题我建议思考一下:能不能用一段程序验证,需不需要利用什么工具;别忘了从Javadoc得到初步信息 授人以渔比提供答案更重要,最好不要你怀疑我这里的每个结论,自己写代码去玩玩

    2018-06-19
    4
    15
  • 忍者无敌1995
    最近有用到countDownLatch,一个批量更新接口,采用多线程提高处理速度,全部处理完将结果封装返回给app端

    作者回复: 是个应用频率高的同步工具

    2018-10-03
    4
    12
  • Phoenix
    经过老师的讲解,我对CountDownLatch的使用场景是这样理解的: 1:A线程的执行,依赖与B线程或C线程等等其他多个线程任务的执行结果来触发A线程任务执行事件

    作者回复: 不错

    2018-11-11
    6
  • zjh
    感觉再分布式的情况下,单体应用中需要多个线程并行的情况可能会被分散在多个应用里面,可能很少会用到CountDownLatch和cyclicbarrier,semaphore倒是比较适合用在分布式的场景下,用来做一些限流。

    作者回复: 不错

    2018-06-21
    2
  • xinxin💛
    老师为什么我用ConcurrentHashMap执行remove操作的时候cpu总是跳得很高,hashmap就还好没那么夸张。。现在为了线程安全还是用ConcurrentHashMap,但执行remove操作的线程一多经常就卡死了。

    作者回复: 你是什么版本jdk?

    2018-07-07
    1
  • jacy
    感觉CountDownLatch有点像c++中的条件锁,想问一下老师,可否给点从c++转java的建议。

    作者回复: 这个...经验谈不上,我也没这经验;或者你可以对比二者的区别,加深理解; 为什么转?希望达到什么目标?

    2018-06-25
    1
  • 步*亮
    SemaphoreWorker类应该为static

    作者回复: 哈哈,那不是inner class

    2018-06-21
  • 天秤座的选择
    做android的,一个页面有A,B,C三个网络请求,其中请求C需要请求A和请求B的返回数据作为参数,用过CountdownLatch解决。
    2018-06-20
    6
    53
收起评论
显示
设置
留言
47
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部