2013-04-20 63 views
1

我们是否有支持基于索引访问的ArrayList的线程安全版本?用于索引访问的线程安全集合

我无法在并发包中找到ArrayList的对应部分,就像我们为LinkedList(ConcurrentLinkedQueue)所做的那样。 阻塞版本不适合我的目的。

我需要创建一个线程安全'排序'arraylist - 希望通过继承一个可用的香草线程安全版本。

回答

0

虽然不推荐使用,但您可以使用Vector来解决所有令人头疼的问题。

+0

也会带来所有的性能开销 – IUnknown 2013-04-20 05:08:58

0

除非你想达到的性能增益的每一位,下面应该在大多数情况下工作:

Collections.synchronizedList(new ArrayList<SomeType>()) 
+0

正在寻找一个基于CAS的选项,如果有的话。另一个注释 - ArrayList上的Collections.synchronizedList给了我们什么 - 这是不可用的向量? – IUnknown 2013-04-20 16:55:22

+0

绝对没有。但算法上讲,几乎肯定不会有更好的解决方案。 – 2013-04-20 18:09:53

+0

@IUnknown我对Vector的了解不多。但避免使用已弃用的库总是一个好主意。它们由于某种原因而被弃用 – Jatin 2013-04-20 18:47:34

0

您可以使用CopyOnWriteArrayList如果迭代是一个很多比修改更频繁。

+0

在CopyonWrite或继承类上排序不会工作 - 它会导致O(N)交换/设置 - 这对性能会造成很大的影响 – IUnknown 2013-04-20 16:53:59

+0

您需要将CopyOnWriteArrayList初始化为排序状态。那时如果列表插入/删除不经常发生,那么你可能会获得比同步ArrayList更好的性能;如果插入/删除频繁,那么性能将成为垃圾。 – 2013-04-20 16:59:51