当前位置: 首页 > 知识库问答 >
问题:

如何处理不停止线程的行为不佳的库

丘智志
2023-03-14

在处理库关闭时无法正确清理线程的第三方库时,有哪些解决方法?

许多库为其中包含的代码显式或隐式地公开生命周期方法。例如,web应用程序框架存在于servlet容器中的web应用程序上下文中。创建上下文时,由于各种原因,框架可能会启动一些线程。

现在,进一步举个例子,当servlet容器或Web应用程序上下文关闭时,Web应用程序框架应该终止所有这些线程。库创建的ExecutorServices应该关闭,或者应该制定其他停止这些线程的方法。

最坏的情况是线程是非守护进程线程。这实际上会停止Java进程的终止。但即使它们是守护进程线程,允许线程继续可能也是一种不好的做法。如果(回到示例)servlet容器嵌入到其他代码中,那么其他代码可能会继续运行,而线程仍在运行,这可能会导致问题。

没有公开的编程方法来停止这些线程,那么可以做些什么呢?

如果您使用的是这样的第三方库,有哪些方法可以强制关闭现有线程?

共有1个答案

韦阳辉
2023-03-14

如果您使用的是这样的第三方库,有哪些方法可以强制关闭现有线程?

一般来说,没有安全的方法可以保证在所有情况下都能正常工作。最接近安全解决方案的方法是使用ThreadGroup枚举所有现有线程,然后使用Thread。中断(),通知每个线程停止。当然,不能保证线程会注意到,或者它们会在中断后完全关闭。

在我看来,最好的策略是:

>

  • 如果线程不需要完全关闭,那么通过调用系统来拔掉JVM上的插头。退出()

    如果需要干净地关闭线程以避免损坏,则不要使用库。。。或者自己解决问题。

  •  类似资料:
    • 我通过创建固定数量的线程来使用执行器服务来进行HTTP GET数据检索。 当Tomcat停止时,我们会出现以下错误: 严重:web应用程序[/viewer]似乎已启动名为[ThreadExecutor_51616156]的线程,但未能停止该线程。这很可能会造成内存泄漏。 这是真的吗?在没有这些服务错误的情况下,如何正确停止tomcat。

    • 问题内容: 我有一个Java应用程序, 我不能编辑 启动一个具有此方法: 我想在某个时间点停止它。如果我使用它不起作用。如果我使用它,则可以使用,但是不建议使用此方法(因此不建议使用该方法,因为在新版本中可能会将其从JVM中删除)。 如何在Java中停止此类不间断线程? 问题答案: 您可以使用检查变量来实现中断方法。 首先,使用易失性检查变量作为: 接下来,将您的线程定义为依赖于此变量。 接下来定

    • 我已经查看了这里给出的一些ANWER,但我没有得到解决我问题的确切方法:我不想创建一个新的类并扩展runnable或Thread。 我有一个服务,它在创建时必须每10秒检查一些东西,并且所需的调用不能从主线程执行,所以在StartCommand()方法中我执行以下操作: 现在,当我调用onStopService()时,我想停止这个线程。方法stop()不推荐使用,因此我使用中断(): 正如我预期的

    • 问题内容: 我有以下代码: 在发生某些事件之后,我应该停止在的方法中声明的操作,该方法实现。 我怎样才能做到这一点?我无法关闭执行器,只能撤消我的定期任务。我可以用吗?如果可以的话,请告诉我它将如何工作。 问题答案: 使用。该是你的任务的处理。您需要取消此任务,它将不再执行。 实际上,是签名,并将其与参数一起使用将导致当前正在运行的执行线程被调用中断。如果线程在阻塞的可中断调用(例如)中等待,则会

    • 我的代码中有一个中断点,用来挂起所有的线程,但是为了测试一个bug,我想同时在该断点运行所有停止的线程,但是我无法找到它。我只能1乘1恢复线程,这对我的测试来说太慢了,有什么帮助吗?

    • 问题内容: 我需要一个解决方案来正确停止Java中的线程。 我有实现Runnable接口的类: 我有启动和停止线程的类: 但是当我关闭时,我在类中得到了异常: 我正在使用JDK 1.6。所以问题是: 如何停止线程并且不引发任何异常? PS我不想使用;方法,因为它已过时。 问题答案: 在类中,你需要一种设置标志的方法,该标志通知线程它将需要终止,类似于你刚刚在类范围中使用的变量。 当你希望停止线程时