我想知道在哪些情况下确切应该使用原子性?
例如:
StringBuffer buffer = new StringBuffer();
也许
AtomicReference<StringBuffer> buffer = new AtomicReference<>(new StringBuffer());
但是什么时候真的有用呢?有人可以解释吗?
最佳答案
当您必须更新引用时,需要使用AtomicReference
,该引用需要由一组线程更新并由其他线程读取。
例如,考虑一个处理作业,其描述和状态由某些JobReport
类表示;例如,您有一些线程正在处理作业队列,当一个线程完成一项作业时,它会创建一个JobReport
对象;在另一组线程中,您想在某个时间点上尽可能准确地了解上次处理的作业:您需要最新的JobReport
。
在这种情况下,所有这些线程都将共享一个AtomicReference<JobReport>
。处理线程将向其写入刚刚完成的作业的报告,而读取报告线程将从该引用中读取。
(嗯,当我说“需要”时...针对该场景还有其他解决方案,但这就是其中之一)