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 题。
这道题,你掌握得怎么样?
掌握程度由你主动标记,阅读和收藏不会自动改变状态。