У меня есть 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
Пожалуйста, помогите мне найти лучший подход.