CopyOnWriteArrayList 的替代方法,用于频繁写入、偶尔迭代
2022-09-04 03:25:01
我有一个要无限期地缓存和共享在多个线程之间。操作包括频繁的添加和删除,以及偶尔迭代它。ArrayList
它位于一个包装类中,该类管理对它的访问: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
请帮我找到最好的方法。