【问题标题】:How to kill a thread immediately from another thread in java?如何从java中的另一个线程立即杀死一个线程?
【发布时间】:2011-05-30 16:00:02
【问题描述】:

无论如何要杀死一个线程或立即中断它。
就像在我的一个线程中一样,我调用了一个需要时间执行(2-4 秒)的方法。这个方法在一个 while(boolean flag) 块中,所以我可以从主线程中中断它。

但问题是,如果我打断它;它将等到执行循环完成,然后在下一次条件检查时,它将停止执行。

我希望它立即停止。有没有办法做到这一点?

【问题讨论】:

    标签: java multithreading


    【解决方案1】:

    如果您需要提前停止线程,则需要在线程中放置更多断点。

    您可以使用 stop() 立即阻止它,但这是有代价的,并且有许多可能的不良副作用。您可以非常小心地安全地使用 stop(),但实际上您会发现放置更多断点(检查线程是否应该停止的点)更简单/更容易/更安全

    顺便说一句,如果你想抛出一个不会被打印的错误,你可以使用 ThreadDeath,因为这可以静默关闭线程。

    【讨论】:

    • 是否可以在类之间共享一个变量。或者,如果我创建一个布尔返回类型方法,这个想法是否可行,该方法用作线程中我的 while 循环的条件检查,并且我可以从任何其他类中中断它?这是一个明智的想法吗?
    • 中断线程最明显的方法是使用 Thread.interrupt() 方法。许多阻塞操作已经支持这一点。您可以测试是否在您的 while 循环中使用 Thread.interrupted() 。 (省去添加字段的麻烦)。
    【解决方案2】:

    不,我不相信有办法。你不想这样做是有原因的。

    Why are Thread.stop, Thread.suspend and Thread.resume Deprecated?

    【讨论】:

    • 可以使用已弃用的方法吗?线程.stop();正是服务于我所追求的目的。我的问题是,如果我的应用程序运行良好,那么它在其他地方也能正常运行吗?
    • @Sara,不,这永远不会。弃用意味着它们被标记为删除。他们可能会在未来的版本中完全删除它(或者可能只是死代码),它甚至可能是下一个版本。你永远都不会知道。最好使用新方法,因为以后维护代码会很痛苦。
    猜你喜欢
    • 2010-12-13
    • 2010-11-22
    • 2011-06-28
    • 1970-01-01
    • 2010-11-09
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多