Thread t2 = new Thread(()->{
while(true) {
if(Thread.currentThread().isInterrupted()) {
System.out.println(x);
break;
}
}
},"t2");
t2.start();
new Thread(()->{
try {
sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
x = 10;
t2.interrupt();
},"t1").start();
while(!t2.isInterrupted()) {
Thread.yield();
}
System.out.println(x);
}
为什么主线的循环会无法结束,当在while(!t2.isInterrupted()) 循环中加入System.out.pritln或者移除Thread.yield之后循环可以正常结束,现在给我的感觉是Thread.yield会影响t2中断状态的可见性
while(true) {
if(Thread.currentThread().isInterrupted()) {
System.out.println(x);
break;
}
}
},"t2");
t2.start();
new Thread(()->{
try {
sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
x = 10;
t2.interrupt();
},"t1").start();
while(!t2.isInterrupted()) {
Thread.yield();
}
System.out.println(x);
}
为什么主线的循环会无法结束,当在while(!t2.isInterrupted()) 循环中加入System.out.pritln或者移除Thread.yield之后循环可以正常结束,现在给我的感觉是Thread.yield会影响t2中断状态的可见性