//1.完全死循环
new Thread(()->{
while(run){
}
System.out.println("Thead1 end");
}).start();
new Thread(()->{
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread2 set run");
run = false;
}).start();
//2.休息1ms
new Thread(()->{
while(run){
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Thead1 end");
}).start();
new Thread(()->{
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread2 set run");
run = false;
}).start();
在1代码中的两个线程能够复现“缺少volatile使得线程1一直循环”的问题。但是加了1ms的sleep之后(2代码),线程1中的循环就能正确马上退出。请求大佬们指点迷津。
曾经看到过类似的问题,可以参考下https://segmentfault.com/q/1010000015787014