开发者社区> 问答> 正文

关于中止线程产生的疑问

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

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做了什么优化把这个线程销毁了还是其他的什么原因?或者说我的观察结果本身就是错的呢?

展开
收起
蛮大人123 2016-03-06 15:47:43 2262 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

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

    2019-07-17 18:54:46
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
多IO线程优化版 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载

相关实验场景

更多