我有一个处理器缓存类,它是一个单例,并且有一个Processor
字段。 Processor
字段将由单个Updating
线程设置,并由许多Worker
个线程使用。
我不知道我当前的实现是否适用于AtomicReference
。请你检查并纠正它吗?另外,在这种情况下,我可以使用volatile
代替AtomicReference
吗?
实施:
class Cache {
private AtomicReference<Processor> processor;
public static getInstance() { ... }
public Processor getProcessor() {
return processor.get();
}
public void setProcessor(Processor old, Processor new) {
processor.compareAndSet(old, new);
}
}
/* Only one thread will update the processor cache */
class UpdatingThread {
private Processor oldProcessor;
public void run() {
// some logic
Processor newProcessor = createNewProcessor();
Cache.getInstance().setProcessor(oldProcessor, newProcessor);
oldProcessor = newProcessor;
// some more logic
}
}
/* Multiple workers will use the processor */
class WorderThread {
public void run() {
// some logic
Processor processor = Cache.getInstance().getProcessor();
// more logic using the processor
}
}
答案 0 :(得分:3)
由于您实际做的唯一事情是重新分配processor
类中的Cache
字段,因此volatile
字段更适合。您不使用AtomicReference
提供的额外功能。
此外,如果你想使用AtomReference
,你应该使用set
方法,这样就不必跟踪oldProcessor
。