什么时候应该使用原子性?什么时候它真的有用?

时间:2014-03-20 09:40:21

标签: java atomicity

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

例如:

StringBuffer buffer = new StringBuffer();

可能是

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

但是当它真的有用的时候?有人可以解释一下吗?

2 个答案:

答案 0 :(得分:2)

AtomicReference是关于在引用本身上执行的两个不同的操作以原子方式执行,例如compareAndSetgetAndSet等。它完全不是指对象上的操作的原子性(引用所指的对象)。

答案 1 :(得分:1)

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

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

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

(好吧,当我说“需要”......那个场景还有其他解决方案,但这是其中之一)