java - 关闭第三个应用程序线程而不等待其完成的首选方法是什么?

标签 java multithreading

我当前正在运行无法更改的 JAR,有时它会无缘无故地卡住。我尝试过寻找中断线程、停止线程等的方法,但没有运气。

提供的每个解决方案都是关于完全退出或等待线程完成。

我想要做的是简单地在超时完成时关闭线程,然后继续执行程序。

我不想做的是使用带有超时、java.util.concurrent.Future、System.exit 的 while 循环,并进行 Thread.interrupt 调用。

这些都没有帮助!

最佳答案

您不能在执行过程中强行停止线程。 Thread.destroy()方法本来可以做到这一点,但它从未实现,并且其文档解释了为什么即使它有效,使用它也是不安全的。

还有一些其他已弃用的方法,例如 Thread.stop()Thread.suspend()这可能确实有效,但使用起来也不安全;他们的文档再次解释了原因。

告诉线程它应该自行终止,然后等待它这样做,是停止线程的唯一安全方法。

<小时/>

作为解决方法,您可以在完全独立的 process 中运行任务。 ,这样您就可以destroy当你想让它停止时就开始。这是安全的,因为进程彼此隔离,并且销毁子进程不会使父进程处于不稳定状态。

不过,与单独的进程交互更加困难,因为您无法像线程那样在进程之间共享变量。您需要通过进程的输入和输出流发送消息。

关于java - 关闭第三个应用程序线程而不等待其完成的首选方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43158050/

相关文章:

c# - 如何在 Java 中转义 "\"字符

java - 使用 JPA 持久性将历史对象映射到项目对象

java - 如何在并发线程中操作 "ConcurrentModificationException"和 `values()` 时避免 HashMap `put()`?

java - ThreadPoolExecutor 具有自定义行为的固定线程池

multithreading - Perl:让线程进入休眠状态

linux - 使用共享内存时如何在没有选择的情况下阻塞线程?

Java:编辑并重新编译.jar?

java - 从 Hibernate 中的多个表中获取数据并将结果存储在 bean 中

java - 在java中使用较低、较高、正确选项猜测数字

c - 使用线程的状态菜单