JAVA多线程传参结果受到sleep()时间长短的影响是为什么?

这是我的代码

 public class VolitaleTest {

    public static void main(String[] args) throws InterruptedException {
        Vo v = new Vo();
        new Thread(v).start();
        Thread.sleep(1000l);
        v.setRunning(false);
    }
}
class Vo implements Runnable {
    private boolean isRunning = true;

    public void run() {
        while (isRunning) {
        }
        System.out.println("Stoped.");
    }
    public void setRunning(boolean isRunning) {
        this.isRunning = isRunning;
    }
}

sleep()方法当中的时间如果为1000l的话,运行的时候v进程不会终止,无法打印Stoped语句,eclipse也显示进程在运行中,
但是如果我把1000l改为1l的话,v进程会终止,也会打印Stoped语句,eclipse也会显示所有进程已经结束
如果我把1000l改为10l的话,就有时候会停止有时候不会停。

另一种尝试:

请问这是为什么?到底是什么在影响进程的停止与否?

加上 volatile 就行了

跨线程访问isRunning变量,你都没有同步!

同不同步对这个没什么影响吧,一个写 一个读

图片说明

图片说明
@chenl_

估计是 vo那个线程读的是自己线程里的isRunning