我想知道在哪些情况下应该使用原子性?
例如:
StringBuffer buffer = new StringBuffer();
可能是
AtomicReference<StringBuffer> buffer = new AtomicReference<>(new StringBuffer());
但是当它真的有用的时候?有人可以解释一下吗?
答案 0 :(得分:2)
AtomicReference
是关于在引用本身上执行的两个不同的操作以原子方式执行,例如compareAndSet
,getAndSet
等。它完全不是指对象上的操作的原子性(引用所指的对象)。
答案 1 :(得分:1)
当您必须更新需要由一组线程更新并由其他线程读取的引用时,您将需要AtomicReference
。
例如,考虑一个处理作业,其描述和状态由一些JobReport
类表示;你有一些线程处理一个作业队列,当一个线程完成一个作业时,它会创建一个JobReport
对象;在另一组线程中,您希望在某个时间点,尽可能准确地知道上次处理的作业:您需要最新的JobReport
。
在这种情况下,所有这些线程将共享一个AtomicReference<JobReport>
;处理线程将向其写入刚刚完成的作业的报告,而读取,报告线程将从该参考读取。
(好吧,当我说“需要”......那个场景还有其他解决方案,但这是其中之一)