Java:关于中止线程产生的疑问

一般常用下面所示的方式来中止线程

public class Work implements Runnable {
 
    private volatile boolean stop = false;
 
    @Override
    public void run() {
        while (!stop) {
            // ...
        }
    }
 
    public void stop() {
        stop = true;
    }
    
}

但是我觉得这种方式有个问题:虽然while循环中的业务逻辑不执行了,但CPU仍会为这个线程分配时间片,继续调用run、while不满足、调用run、while不满足,这样岂不是造成了不必要的资源浪费,但是观察后发现当stop被设为true后实际上这个线程就已经不存在了,这是为什么呢?难道是JVM做了什么优化把这个线程销毁了还是其他的什么原因?或者说我的观察结果本身就是错的呢?

阅读 2.6k
1 个回答

当你stop=true了,也就退出了while循环,很自然的你的run()方法就已经执行完了,那么这个线程的工作就已经做完了,所以也就不会存在你说的那些问题了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题