一般常用下面所示的方式来中止线程
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做了什么优化把这个线程销毁了还是其他的什么原因?或者说我的观察结果本身就是错的呢?
当你stop=true了,也就退出了while循环,很自然的你的run()方法就已经执行完了,那么这个线程的工作就已经做完了,所以也就不会存在你说的那些问题了。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。