加上Thread.sleep()后,要运行很久才能结束

来源:5-3 如何停止线程

骑着猪找未来

2019-10-16

加上Thread.sleep(1000)后,运行后会像视频中很快停止,但是出现“任务运行结束了”这几个字要很多分钟以后,不像视频中立刻出现,这是为什么呢?

图片描述

写回答

3回答

悟空

2019-10-17

你下载源码看下我的代码,是这样的:

while (!Thread.currentThread().isInterrupted() && num <= Integer.MAX_VALUE / 2) {
    if (num % 10000 == 0) {
        System.out.println(num + "是10000的倍数");
    }
    num++;
}

这里是while判断了中断,如果中断就跳出while循环。但是你的代码里的判断放到了while里面的if里,所以你中断后,虽然不再打印“是10000的倍数”,但是num++还是在持续运行的,直到计算到了Integer.MAX_VALUE/2,所以会耗费很长时间。

0
2
骑着猪找未来
非常感谢!
2019-12-12
共2条回复

悟空

2019-10-16

因为你中断后,虽然不再打印“是10000的倍数”,但是num++还是在持续运行的,直到计算到了Integer.MAX_VALUE/2,所以会耗费很长时间。

0
1
骑着猪找未来
为什么老师的视频里是立即运行出来呢,我的是等很久,十分钟左右才结束,这比没有加入interrupt方法时正常结束的时间相差太远了
2019-10-17
共1条回复

悟空

2019-10-16

你贴一下代码,我来看看

0
1
骑着猪找未来
问题描述错了,是加了interrupt()方法后,运行中断后,要很久才能出现"任务结束运行"这几个字
2019-10-16
共1条回复

线程八大核心+Java并发原理及企业级并发解决方案

完整的并发知识网络+丰富的工作内容分享+50余道并发高频面试题

2512 学习 · 939 问题

查看课程