首页 新闻 搜索 专区 学院

while(flag){}循环问题

0
悬赏园豆:20 [待解决问题]

我下面的代码没用Volatile 修饰flag,所以程序会一直运行,但是,我在while(flag)里面随便打印一句话,结果,结果程序就停了,这是为什么呢

 class ThreadVolatile1 extends Thread{
    public  boolean flag=true;
    @Override
    public void run() {
        // TODO Auto-generated method stub
        
        System.out.println("开始执行子线程");
        
        while(flag) {
            //System.out.println("输出");
        }
        System.out.println("线程停止");
    }
    public void setRunning(boolean flag) {
        this.flag=flag;
    }
}
public class ThreadVolatile{
    public static void main(String[] args) throws Exception{
        ThreadVolatile1 demo=new ThreadVolatile1();
        demo.start();
        Thread.sleep(3000);
        demo.setRunning(false);
        System.out.println("flag设置成false");
        Thread.sleep(1000);
        System.out.println(demo.flag);
    }
}
灼雪的主页 灼雪 | 初学一级 | 园豆:182
提问于:2019-10-01 23:57
< >
分享
所有回答(1)
0

如你所愿:volatile 加上就OK。

保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。(实现可见性)

 public volatile  boolean flag = true;

https://www.jianshu.com/p/8755e8fd1d20
https://www.cnblogs.com/xiaoxi/p/7251171.html

张朋举 | 园豆:1813 (小虾三级) | 2019-10-03 08:33
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册