This question already has answers here:
What is the difference between atomic / volatile / synchronized?
(7个答案)
1年前关闭。
我知道
因此,如果我使用volatile的
例如。
这是线程安全的吗?
不需要这个是不常见的(IME)-因为通常您不会重新分配
(7个答案)
1年前关闭。
我知道
volatile
允许可见性,AtomicInteger
允许原子性。因此,如果我使用volatile的
AtomicInteger
,是否意味着我不必再使用任何同步机制了?例如。
class A {
private volatile AtomicInteger count;
void someMethod(){
// do something
if(count.get() < 10) {
count.incrementAndGet();
}
}
这是线程安全的吗?
最佳答案
我相信Atomic*
实际上既提供了原子性又提供了波动性。因此,当您调用(说)AtomicInteger.get()
时,可以确保获得最新值。这记录在java.util.concurrent.atomic
package documentation中:
现在如果你有
volatile AtomicInteger count;
volatile
部分意味着每个线程将使用最新的AtomicInteger
引用,而它是AtomicInteger
的事实意味着您还将看到该对象的最新值。不需要这个是不常见的(IME)-因为通常您不会重新分配
count
来引用另一个对象。相反,您将拥有:private final AtomicInteger count = new AtomicInteger();
那时,它是final
变量这一事实意味着所有线程都将处理同一对象-并且它是Atomic*
对象这一事实意味着它们将在该对象中看到最新值。关于java - AtomicInteger和volatile ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14338533/
10-09 04:08