Скажем, у меня есть следующий код:
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?