【问题标题】:Does calling interrupt on thread stop the thread immediately or not? [duplicate]在线程上调用中断是否立即停止线程? [复制]
【发布时间】:2018-06-17 03:01:24
【问题描述】:

我有一种方法可以从一个线程内的网站中抓取数据,然后给我检索到的数据总数。

当我按下取消按钮 Thread.interrupt() 被调用并且数据被废弃几秒钟然后它停止并给我检索到的数据总数。

调用 Thread.interrupt() 是立即停止线程执行还是需要几秒钟才能完全停止?

【问题讨论】:

    标签: java multithreading


    【解决方案1】:

    向线程发送中断本身并不会停止线程。

    只有在该线程上运行的代码将中断状态考虑在内时,该代码才能响应中断以尽早停止正在执行的操作。多快,完全取决于该代码。

    有些代码甚至可以忽略中断状态。有些代码甚至无法立即响应中断状态(想到阻塞 IO)。

    【讨论】:

    • 那我如何让函数考虑中断状态?
    • @ProgrammingLycan 如果这是您的方法,请检查它。如果这不是你的方法,你不能。假设该方法还没有使用检查它的东西。
    【解决方案2】:

    Thread.interrupt() 不会停止线程。它只是发出停止线程的信号。这是代码需要轮询和检查状态并适当处理。

    如果该线程在调用 Object 类的 wait() 方法或该类的 join()、sleep() 方法时被阻塞,则其中断状态将被清除并收到 InterruptedException .

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-08
      • 1970-01-01
      • 1970-01-01
      • 2014-02-11
      相关资源
      最近更新 更多