Я видел несколько примеров в java, где они выполняли синхронизацию в блоке кода, чтобы изменить некоторую переменную, в то время как эта переменная была объявлена летучей исходной. Я видел это в примере singleton-класса, где они объявили уникальный экземпляр как изменчивый, и они sychronized блок, который инициализирует этот экземпляр... Мой вопрос заключается в том, почему мы объявляем его изменчивым, пока мы его синхронизируем, почему нам нужно делать оба? не является одним из них, достаточным для другого?
public class someClass {
volatile static uniqueInstance = null;
public static someClass getInstance() {
if(uniqueInstance == null) {
synchronized(someClass.class) {
if(uniqueInstance == null) {
uniqueInstance = new someClass();
}
}
}
return uniqueInstance;
}
заблаговременно.