volatile is also sufficient here. You only need AtomicReference if you want to do lazySet or compareAndSet. Generally I shy away from AtomicReference when it isn't what I need because it is an extra allocation and indirection (which isn't relevant in this slow path code).