首页 新闻 会员 周边

关于volatile的可见性疑问

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

public class T01_HelloVolatile {

/*volatile*/boolean running = true;
void m(){
    System.out.println("m start");
    while (running){
    }
    System.out.println("m end");
}

public static void main(String[] args) {
    T01_HelloVolatile t = new T01_HelloVolatile();
    new Thread(t::m,"t1").start();

    try {
        TimeUnit.SECONDS.sleep(1);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    t.running = false;
}

}
为什么加不加volatile,都是休息一秒后 m end!

宝宝佩恩天道的主页 宝宝佩恩天道 | 初学一级 | 园豆:194
提问于:2020-11-29 20:56
< >
分享
所有回答(1)
0

volatile不保证原子性,能够保证可见性;
不加volatile,可见性不一定能保证,但也没说“绝对不可见”

寻觅beyond | 园豆:923 (小虾三级) | 2020-11-29 22:08

谢谢,我刚试了 之前用的1.8.0_112确实存在这个问题,刚下载了1.8.0_271就没问题了。

支持(0) 反对(0) 宝宝佩恩天道 | 园豆:194 (初学一级) | 2020-11-29 23:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册