2013-04-20 42 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