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

Eno*_*ode 18 java collections

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

示例:HashSet未同步

Pet*_*rey 10

有三组收藏.

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

简而言之,我建议您使用的任何集合都不会同步.


Mar*_*coS 8

你可以得到一个Java的版本同步Collection

Collections.synchronizedCollection(Collection<T> c)
Run Code Online (Sandbox Code Playgroud)

[ javadoc ]


And*_*s_D 7

简单回答:没有单个实现Collection是同步的,因为 synchronized它不是类属性,它只适用于方法和块.

我想,你想知道哪些实现是线程安全的,java集合框架中的哪些类可以安全地在多线程环境中使用.

该信息始终包含在javadoc中(如下所示:Arraylist - 这不是线程安全的)

  • +1这是我正在寻找的回应. (2认同)

小智 6

线程安全集合-

  1. 并发哈希图

线程安全,而不必同步整个映射。使用锁完成写操作时可以非常快速地进行读取在对象级别不进行锁使用多个锁。

  1. SynchronizedHashMap

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

  1. 向量

  2. 哈希表

  3. CopyOnWriteArrayList

  4. CopyOnWriteArraySet

其余所有线程都不安​​全

  • 队列怎么样?例如ConcurrentLinkedQueue、BlockingQueue (3认同)

dgl*_*iru 5

Collection 接口中的ArrayList、LinkedList、HashSet、LinkedHashset 和TreeSet 以及HashMap、LinkedHashMap 和Treemap 都是非同步的

集合接口中的向量是同步的

  • HashTable 也是同步的 (3认同)