Java:关于中止线程产生的疑问
PHPz
PHPz 2017-04-17 15:56:05
[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做了什么优化把这个线程销毁了还是其他的什么原因?或者说我的观察结果本身就是错的呢?

PHPz
PHPz

学习是最好的投资!

全部回复(1)
巴扎黑

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号