我想知道在哪些情况下确切应该使用原子性?

例如:

StringBuffer buffer = new StringBuffer();


也许

AtomicReference<StringBuffer> buffer = new AtomicReference<>(new StringBuffer());


但是什么时候真的有用呢?有人可以解释吗?

最佳答案

当您必须更新引用时,需要使用AtomicReference,该引用需要由一组线程更新并由其他线程读取。

例如,考虑一个处理作业,其描述和状态由某些JobReport类表示;例如,您有一些线程正在处理作业队列,当一个线程完成一项作业时,它会创建一个JobReport对象;在另一组线程中,您想在某个时间点上尽可能准确地了解上次处理的作业:您需要最新的JobReport

在这种情况下,所有这些线程都将共享一个AtomicReference<JobReport>。处理线程将向其写入刚刚完成的作业的报告,而读取报告线程将从该引用中读取。

(嗯,当我说“需要”时...针对该场景还有其他解决方案,但这就是其中之一)

10-06 12:58