Java 后端面试题库 / 全部题解免费阅读理解原理,有条理地回答

Java 并发集合提供了什么?

查看完整题解

参考回答

直接回答

并发集合为共享访问提供明确的同步与遍历语义,例如 ConcurrentHashMap 用于并发映射,CopyOnWriteArrayList 用于读多写少的快照遍历,ConcurrentLinkedQueue 用于非阻塞队列,BlockingQueue 增加等待能力。它们不是一种统一数据结构,也不是所有操作都没有锁。

讲清原理

选择时先问业务:需要按键原子更新、等待可用任务,还是遍历期间看到固定内容?ConcurrentHashMap 的迭代是弱一致的,不保证读到全表同一时刻的快照;CopyOnWriteArrayList 的迭代器抓住创建时的数组,不随后续结构变动。

“容器线程安全”也不自动保护存进去的可变对象。例如映射中的值是普通 ArrayList,拿到列表后直接 add,仍需要自己的同步策略。多个键之间的整体事务也不由单键更新方法提供。

快速失败检测改动,快照固定旧数组,弱一致遍历容许并发变化
快速失败检测改动,快照固定旧数组,弱一致遍历容许并发变化

例子与易错点

Java 21 的 main 片段:

var counts = new java.util.concurrent.ConcurrentHashMap<String, Integer>();
counts.merge("A", 1, Integer::sum);
counts.merge("A", 1, Integer::sum);
System.out.println(counts.get("A"));

输出 2;该类的 merge 对指定键的更新有原子约定。回调应简短,并且不能在计算期间修改这张映射。普通 HashMap 上同名的 merge,不能据此推导出相同的并发保证。

相关题:第 28 题、第 33 题、第 39 题、第 45 题。

这道题,你掌握得怎么样?

掌握程度由你主动标记,阅读和收藏不会自动改变状态。