【问题标题】:Force kill, stop or destroy thread in java [duplicate]在java中强制终止,停止或销毁线程[重复]
【发布时间】:2020-06-25 12:41:20
【问题描述】:

有没有办法让启动子线程的主线程停止、杀死或销毁子线程?

大家建议使用一些变量来检查thead本身内部,以便在变量改变状态时退出。 我做不到,线程是一个非常复杂和庞大的程序,不可能预见所有可能使其循环运行的条件。

超过时间我需要从外部强制终止线程。

谢谢

【问题讨论】:

  • 不,他们建议使用标志变量并在线程本身内部检查它,正如我在问题中所说,我不能使用这种方法。
  • 与其自己玩线程,不如让ExecutorService去做。
  • @Roberto 他们在我链接的那篇文章中讨论了所有可能的选项。据说那里没有任何其他安全的方法来停止线程。

标签: java multithreading destroy


【解决方案1】:

不,

一个线程强行杀死另一个线程没有安全的方法。没有安全的方法可以让一个线程强制另一个线程执行任何操作

问题是,线程通过共享变量进行通信。而且,任何多线程程序的作者都必须小心地“同步”不同线程的活动,这样任何线程都无法看到由另一个线程的活动导致的处于某种无效状态的共享变量。

如果您可以随时杀死线程,那么您无法确保被杀死的线程不会使共享变量处于不可挽回的糟糕状态。

如果您无法解决杀死“孩子”的需要,那么您应该重新编写代码,使孩子成为子进程。进程只以更可控的方式共享状态,编写一个可以在杀死流氓子进程后安​​全地继续执行的应用程序要容易得多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    • 2011-08-22
    • 2013-05-21
    • 2013-09-24
    • 1970-01-01
    相关资源
    最近更新 更多