我应该明确终止过期的线程吗?

Posted

技术标签:

【中文标题】我应该明确终止过期的线程吗?【英文标题】:Should I explicity terminate expired threads? 【发布时间】:2012-06-10 21:05:34 【问题描述】:

我有一个线程池,其中包含执行特定任务的线程。任务完成后,我让一个worker的run()方法终止。

在此之后,我应该使用 sys.exit() 显式终止线程吗?我注意到工作线程在后台持续存在,即使在任务完成后也是如此。

清除旧线程的推荐方法是什么?

【问题讨论】:

【参考方案1】:

执行sys.exit 将退出整个应用程序。没有必要对线程完成执行做任何事情。

有关停止/终止线程的更多参考请参阅this question。

【讨论】:

过期的线程会自动被垃圾回收吗?我假设由于这样的线程仍然可以返回 is_alive() 那么它存在于内存中。在正常操作中,我的程序从不调用 sys.exit() 只要有对线程对象的引用,线程对象本身就不会被垃圾回收。但是在线程中创建的对象通常在线程存在之后被收集。但是在某些情况下无法收集对象,例如循环依赖。但这是一个普遍的问题,与线程无关。

以上是关于我应该明确终止过期的线程吗?的主要内容,如果未能解决你的问题,请参考以下文章

AngleSharp Html Parser 线程安全吗?

一文搞懂 Java 线程中断

java线程之停止线程

java 多线程5: java 终止线程及中断机制 (stop()interrupt() interrupted()isInterrupted())

C# 在新线程中调用方法

您需要加入已取消的线程吗? (线程)