Скажем, я обновляю значения двух переменных в синхронизированном методе. Возможно ли, чтобы новые значения, установленные в синхронизированном методе, были видны другим потокам до выхода из синхронизированного блока?
public synchronized void setValues(){
a=5;
// assume thread is preempted after this assignment
// would the value 5 be visible to other threads?
// my understanding is that the values will not be flushed to
// main memory until the lock is released- i.e., until the synchronized
// method is complete. So the changes will not be visible to other
// threads even when not using synchronization
b=10;
}
Ниже метод не синхронизирован, поэтому я понимаю, что поток может видеть устаревшие значения. Мой вопрос: если поток вытесняется после присвоения a, возможно ли, чтобы новое значение "5" для переменной a было видно в методе printValues?
public void printValues() {
System.out.println(a + " " + b);
}