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

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 就行了

    点赞 打赏 评论
  • blownewbee 2017-04-10 02:03

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

    点赞 打赏 评论
  • chenl_ 2017-04-10 02:25

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

    点赞 打赏 评论
  • chenl_ 2017-04-10 02:28

    图片说明

    点赞 打赏 评论
  • luciferyyw 2017-04-10 02:36

    图片说明
    @chenl_

    点赞 打赏 评论
  • chenl_ 2017-04-10 02:38

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

    点赞 打赏 评论

相关推荐 更多相似问题