来个大神给深度解析下下面两段代码
 不会发生死循环
会发生死循环 private static Boolean flag = true;不加volatile关键字

解决方案 »

  1.   

    因为你没有加volatile关键字,即没有要求一定要刷新缓存,所以刷不刷新缓存并不固定。
    这个例子证明不了什么问题。从现象看,
    第一个例子走了IO,不会一直占用CPU,缓存在空闲的时候被刷新了,看到了更改后的flag值。
    第二个例子一直占用CPU,没时间刷新缓存,所以看不到flag值。你可以让第二个每循环一次停10毫秒试一下。
      

  2.   

    也就是说,即使在不加volatile关键字的时候,线程也会去刷新缓存吗?
      

  3.   

    好像懂点了,可以理解为线程一直占着CPU不放,所以没有空闲时间去刷新缓存吗?