Java中的并发数组

del*_*met 16 java arrays concurrency

因此,Java中有一个并发的hashmap,其优点是不会锁定整个哈希表,而只是锁定它的一部分.我想知道阵列是否有这样的结构.特别是当调整阵列大小时,锁定整个阵列是不可取的,尤其是在实时应用中.还有什么吗?

Boz*_*zho 18

AtomicIntegerArray(和类似的AtomicReferenceArray)可能适合您的描述.但正如Marcelo所说 - 你无法调整阵列的大小.因此,您只需获得并发安全性,而无需显式锁定(打开)整个阵列.

一个数组......其中元素可以原子方式更新


gna*_*nat 7

Java 6还添加了一个名为ConcurrentSkipListSet的有趣集合

... ,操作及其变体的平均log(n)时间成本.插入,删除和访问操作由多个线程安全地同时执行.迭代器是弱一致的,在迭代器创建时或之后的某个时刻返回反映集合状态的元素.它们不会抛出ConcurrentModificationException,并且可能与其他操作同时进行...contains, addremove

  • 事实上,这是一个很好的答案.唯一的保留是1)它只能用于Comparable元素,2)元素被排序 (2认同)

duf*_*ymo 5

您始终可以使用以下其中一种:

  1. java.util.Collections.synchronizedList(List<T> list)
  2. java.util.Collections.synchronizedCollection(Collection<T> collection)
  3. java.util.Collections.synchronizedSet(Set<T> set)

你的要求不是很清楚。也许 java.util.collections copy-on-write 列表或集合也可以。

  • 这将锁定整个对象,OP 要求数组的 ConcurrentHashMap 等效项。 (2认同)
  • 我知道这是一个旧线程,但我在寻找某些东西时遇到了这个问题,我认为最好突出显示。我很抱歉,但我认为这没有用。我既没有贬低你,也没有任何其他(隐藏的)意图。 (2认同)