线程t1为什么没有一直运行

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控制