哪些 Java 集合是同步的(线程安全的),哪些不是?

2022-09-01 11:27:56

哪些 Java 集合是同步的,哪些不是?

示例:哈希集未同步


答案 1

线程安全集合 -

  1. ConcurrentHashMap

线程安全,无需同步整个映射 在写入时使用锁完成读取速度非常快 对象级别无锁定 使用大量锁。

  1. 同步哈希映射

对象级同步 读取和写入获取锁定集合有性能缺陷 可能导致争用

  1. 向量

  2. 哈希表

  3. CopyOnWriteArrayList

  4. CopyOnWriteArraySet

其余都不是线程安全的


答案 2

有三组集合。

  • Java 1.0集合,其中大部分是遗留类。这包括 Hashtable、Vector、Stack。这些是同步的,但我不建议您使用它们。属性可能是一个例外,但我不会在多线程上下文中使用它。
  • 1998年添加的Java 1.2集合在很大程度上取代了这些集合,这些集合不是同步的,但可以使用方法进行同步。Collections.synchronizedXxx()
  • 2004 年添加的 Java 5.0 并发集合支持无锁、线程安全的集合。

简而言之,我建议您使用的所有集合都不是同步的。