этот код может печатать "light is null" навсегда? И нужно ли 'volatile' для украшения ссылки?
Я пытаюсь запустить код, поток может остановиться.я знаю, что если использовать булевый тип вместо Light, он должен использовать volatile。, но когда я использую ссылку, я не знаю.В большинстве программ, которые используют ссылки в нескольких потоках для общего доступа, я не использую volatile для декорации, кроме SingleTon example.but мы делаем это для выполнения компьютерных инструкций по порядку, а не для видимости в нескольких потоках.
public class Room {
private Light light;
public Light getLight() {
return light;
}
public void setLight(Light light) {
this.light = light;
}
Runnable work = new Runnable() {
@Override
public void run() {
while (light == null) {
System.out.println("light is null");
}
}
};
public void start() {
new Thread(work).start();
}
public static void main(String[] args) throws InterruptedException {
Room room = new Room();
room.start();
Thread.sleep(3000);
room.setLight(new Light());
while (true) {
}
}
}
is the reference 'light' need 'volatile' to decorate