luciferyyw 2017-04-10 02:05 采纳率: 100%
浏览 1835
已采纳

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的话,就有时候会停止有时候不会停。

另一种尝试:

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

  • 写回答

6条回答 默认 最新

  • chenl_ 2017-04-10 02:36
    关注

    加上 volatile 就行了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?