gpt4 book ai didi

java - 在 Java 中销毁线程

转载 作者:行者123 更新时间:2023-11-30 07:20:02 25 4
gpt4 key购买 nike

我在stackoverflow上看到了一些帖子,并通读了oracle发布的关于销毁线程的教程。据我了解,一旦您 start() 一个线程,您就不能使用 stop() 删除该线程。建议让线程无限期地 sleep() 而不是实际从调度程序中删除线程。这种想法对吗?

这也让我想到了我的下一个问题,这就是为什么人们使用 线程池吗? 与其“hibernate ”一个线程,不如使用该线程处理其他工作更有效而不是创建新线程。请让我知道我对多线程管理的理解是否正确。 Java 不允许以安全的方式完全删除 thread 是没有意义的。

最佳答案

通常认为在线程启动后强行停止它(或使其无限期 hibernate )是一个非常糟糕的主意,因为该线程将无法清理它已获得的任何资源。例如,如果一个线程获得了一个锁并被强行杀死或无限期 hibernate ,那么锁将不会被释放并且会发生死锁。同样,如果线程正在更改数据结构并提前终止,则数据结构可能处于损坏状态,随后会导致严重问题。

在 Java 中停止线程的最好方法是中断线程并告诉它需要尽快尝试关闭。这样,线程可以尝试停止它正在做的事情并在关闭之前释放所有资源。换句话说,您请求线程关闭,而不是强行杀死它。

这与线程池存在的原因无关。线程池很有用,因为通常有一些与创建或销毁线程相关的开销,这是由于跟踪线程状态和进度所需的内部 JVM 或 OS 级簿记。线程池可以回收线程并让它们执行不同的任务,方法是让线程 hibernate 直到任务准备就绪,然后唤醒并执行任务。这比生成新线程、自己执行任务然后拆除线程要快得多。

希望这对您有所帮助!

关于java - 在 Java 中销毁线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14271957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com