这是 Java 中 AtomicReference 的正确用例吗?

Is this a correct use case for AtomicReference in Java?

我有一个处理器缓存 class,它是一个单例并且有一个 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
    }
}

由于您实际做的唯一一件事是重新分配 Cache class 中的 processor 字段,因此 volatile 字段更适合。您没有使用 AtomicReference 提供的额外功能。

此外,如果您确实想使用 AtomReference,您应该只使用 set 方法,这样您就不必跟踪 oldProcessor.