假设我有以下代码:
private Integer number;
private final Object numberLock = new Object();
public int get(){
synchronized(number or numberLock){
return Integer.valueOf(number);
}
}
我的问题是,在以下情况下,add
方法的以下版本是否需要将 number
设为 volatile:
public void add(int num){
synchronized(number)
number = number + num;
}
public void add(int num){
synchronized(numberLock)
number = number + num;
}
我知道这些都是原子操作,但我的问题是,number
guarennteed 的值是否被推送到全局内存并且对所有线程可见,而无需使用 volatile ?
最佳答案
is the value of number guarennteed to be pushed out to global memory and visible to all threads without using volatile?
是的。同步也提供可见性。实际上,同步提供可见性和原子性,而 volatile 仅提供可见性。
关于java - 在决定使用 volatile 时,实际的锁是否重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9162622/