public class VolatileDemo {
private static boolean flag = true;
public static void main(String[] args) throws InterruptedException {
Thread t1 = new Thread(() -> {
while (flag) { }
});
t1.start();
Thread t2 = new Thread(() -> flag = false);
t2.start();
}
}
为什么会一直运行
flag是个全局静态变量
你在线程2里把它置成了false
那么在线程1里它的值也变成了false
原因:因为flag是相对当前类的全局变量,并且还是静态变量,第二次对flag进行了赋值false,t1线程里面的while循环自然就结束了
如果想t1一直循环,设置独立的一个flag控制