Предположим, что у меня есть volatile reference c для MyClass, а MyClass имеет целое поле x. Если один поток изменяет значение x, будет ли новое значение гарантировано видимым для всех других потоков, или же x тоже должен быть изменчивым?Будут ли мутации изменчивой переменной видны для всех потоков?
Другими словами, приведен нижеприведенный пример для печати 2?
public class MyClass {
private static volatile MyClass c;
private int x = 1;
public static void main(String[] args) {
c = new MyClass();
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
c.x = 2;
}
});
thread.start();
try {
thread.join();
System.out.println(c.x);
} catch (InterruptedException ex) {
//
}
}
Если нет, что делать, если я хочу манипулировать объектом, исходный код которого я не контролирую, например Collection? Как я могу гарантировать, что изменения в объекте Collection видны для всех потоков?
Вы можете указать код этой проблемы для лучшего понимания – Ansu
Пример кода добавлен. – user155631