请列举Java中常用的线程安全集合,并说明它们各自的特点和使用场景?
考察说明
考查对Java并发集合的掌握程度,包括常用类的特性与适用场景。
回答思路
- 【回答框架 1】线程安全集合主要分为三大类:传统同步集合、并发集合和Copy-On-Write集合。传统同步集合包括Vector和Hashtable,它们通过在方法上使用synchronized保证线程安全,但并发性能较差。
- 【回答框架 2】并发集合基于java.util.concurrent包,如ConcurrentHashMap、CopyOnWriteArrayList、ConcurrentLinkedQueue等。ConcurrentHashMap采用分段锁(Java8后为CAS+synchronized)提高并发度,CopyOnWriteArrayList适用于读多写少的场景。
- 【回答框架 3】选择合适的集合需根据实际并发场景:高并发读写选ConcurrentHashMap,读多写少用CopyOnWriteArrayList,多线程操作队列可考虑阻塞队列,简单同步可用Collections.synchronizedList,但需注意复合操作的原子性。
- 【关键点 1】Vector和Hashtable是传统同步集合,性能差,不推荐使用。
- 【关键点 2】ConcurrentHashMap支持高并发,使用CAS和synchronized保证安全。
- 【关键点 3】CopyOnWriteArrayList适用于读多写少,写操作复制数组。
- 【关键点 4】Collections提供同步包装方法,但复合操作需额外同步。
- 【易错点 1】使用Collections.synchronizedList时,迭代和复合操作仍需手动同步。
- 【易错点 2】CopyOnWriteArrayList写操作开销大,不适用于写频繁场景。
- 【易错点 3】注意ConcurrentHashMap不允许null键值,而Hashtable允许。