【发布时间】:2018-06-17 03:01:24
【问题描述】:
我有一种方法可以从一个线程内的网站中抓取数据,然后给我检索到的数据总数。
当我按下取消按钮 Thread.interrupt() 被调用并且数据被废弃几秒钟然后它停止并给我检索到的数据总数。
调用 Thread.interrupt() 是立即停止线程执行还是需要几秒钟才能完全停止?
【问题讨论】:
标签: java multithreading
我有一种方法可以从一个线程内的网站中抓取数据,然后给我检索到的数据总数。
当我按下取消按钮 Thread.interrupt() 被调用并且数据被废弃几秒钟然后它停止并给我检索到的数据总数。
调用 Thread.interrupt() 是立即停止线程执行还是需要几秒钟才能完全停止?
【问题讨论】:
标签: java multithreading
向线程发送中断本身并不会停止线程。
只有在该线程上运行的代码将中断状态考虑在内时,该代码才能响应中断以尽早停止正在执行的操作。多快,完全取决于该代码。
有些代码甚至可以忽略中断状态。有些代码甚至无法立即响应中断状态(想到阻塞 IO)。
【讨论】:
Thread.interrupt() 不会停止线程。它只是发出停止线程的信号。这是代码需要轮询和检查状态并适当处理。
如果该线程在调用 Object 类的 wait() 方法或该类的 join()、sleep() 方法时被阻塞,则其中断状态将被清除并收到 InterruptedException .
【讨论】: