当主线程将变量改变之后,另一个线程一直无法获取到此变量的最新值,这种情况称为可见性问题。
请使用编程案例实现线程可见性问题。
public class Test {
private static boolean stop = false;
public static void main(String[] args) throws InterruptedException {
System.out.println("嗨客网(www.haicoder.net)\n");
new Thread(new Runnable() {
@Override
public void run() {
while (!stop) {
}
System.out.println("循环结束,stop 为:" + stop);
}
}).start();
System.out.println("main 线程启动");
Thread.sleep(1000);
stop = true;
System.out.println("main 线程设置 stop 为:" + stop);
}
}
运行结果如下图:
以上案例发现,即使当变量 stop 为 true 时,子线程也不会停止,此处可以发现多线程存在可见性的安全问题。