我有一個ArrayList
將被緩存和無限期地在多個線程之間共享。操作包括頻繁添加和刪除,以及偶爾迭代它。替代CopyOnWriteArrayList頻繁寫入,偶爾迭代
的ArrayList
生活在管理訪問它的包裝類:
public class MyListWrapper<T> implements Iterable<T> {
private List<T> innerList = new ArrayList<T>();
public Iterator<T> iterator() {
return innerList.listIterator();
}
public void add(T element) {
innerList.add(element);
//app-specific logic
}
//remove(T), etc in the same pattern...
}
我目前正在線程安全的準備工作。起初,CopyOnWriteArrayList
看起來是最好的答案,但其表現令我擔憂,因爲修改將比其他任何事情更頻繁。
會手動更改包裝類,如這是一個更好的選擇?:
public Iterator<T> iterator() {
return new ArrayList<T>(innerList).listIterator();
}
//plus concurrency tweaks for any non-atomic modifications to innerList
請幫我找到最好的方法。
非常好,這正是我所需要的。 +1教我一些事情。謝謝 – 2011-05-20 15:46:39
它的迭代器是線程安全的,所以你不需要同步並且可能不需要拷貝。 – 2011-05-20 16:45:49
在java 1.8中我猜這個方法已經被重命名爲Collections.newSetFromMap – 2017-02-08 03:31:58