【发布时间】:2014-03-05 15:17:38
【问题描述】:
我正在努力寻找实现以下 API 的好方法:
void add(Object o);
void processAndClear();
该类将存储对象,并在调用 processAndClear 时遍历当前存储的对象,以某种方式处理它们,然后清除存储。这个类应该是线程安全的。
显而易见的方法是使用锁定,但我想更加“并发”。这是我将使用的方法:
class Store{
private AtomicReference<CopyOnWriteArrayList<Object>> store = new AtomicReference<>(new CopyOnWriteArrayList <>());
void add(Object o){
store.get().add(o);
}
void processAndClear(){
CopyOnWriteArrayList<Object> objects = store.get();
store.compareAndSet(objects, new CopyOnWriteArrayList<>());
for (Object object : objects) {
//do sth
}
}
}
这将允许尝试添加对象的线程几乎立即继续进行,而无需任何锁定/等待 xlearing 完成。这是或多或少正确的方法吗?
【问题讨论】:
标签: java multithreading locking copyonwritearraylist