线程与主内存之间的可见性问题

各位大神好,
java中不是不允许一个线程无原因的(没有发生assign)把数据从线程的工作内存同步到主内存中 为什么会线程会停止呢
为什么我把: //System.out.println(isRunning);注释掉线程就不会结束,而不注释掉线程就会结束,有什么区别吗?

 public class _08volatile01 extends Thread {
    private  boolean isRunning=true;
    private void setRunning(boolean isRunning){
        this.isRunning=isRunning;
    }
    @Override
    public void run() {
    System.out.println("进入run方法");
    System.out.println(isRunning);
    while(isRunning==true){
        //System.out.println(isRunning);

    }
    System.out.println("线程终止");
    }
    public static void main(String[] args) throws InterruptedException {
    boolean flag=true;
        _08volatile01 rt=new _08volatile01();
    rt.start();
    Thread.sleep(3000);
        rt.isRunning=false;
    System.out.println("isRunning的值已经设置了false");
    Thread.sleep(1000);
    System.out.println(rt.isRunning);

    }
    }
我认为程序是否终结跟循环里面这行代码是否注释掉没有关系,而是你的main函数在指定时间后将运行标识置为false了,程序中有两个线程main线程和你自定义的线程。