gpt4 book ai didi

java - ThreadPoolExecutor 中的线程何时死亡

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

问题:我想知道当线程的 run 方法中抛出 RunTimeException 时,该线程的线程局部会被保留吗?这个问题的答案就在我下面要问的内容中。因此,如果线程死亡(当抛出异常时),则线程本地快照将被清除,或者如果线程没有死亡,在这种情况下线程本地会发生什么。我们需要以编程方式处理这个问题吗?设想:在重负载期间,请求传入并且处理花费了太长时间,并且在创建响应之前,异步上下文超时。在这种情况下会发生什么?处理请求的线程会发生什么?

这里有更多详细信息:我一直在研究 ThreadPoolExecutors 内部如何工作。我很想知道当线程的 run 方法中抛出 RunTimeException 时会发生什么。它会被杀死并且 ThreadPoolExecutor 最终会创建全新的线程吗?或者 JVM 以某种方式不让该线程死亡,以便它可以在游泳池。我认为线程死了,ThreadLocal 快照也死了。我想深入了解 ThreadPoolExecutor 到底如何处理异常以及特定线程的生命周期如何围绕它进行。感谢您的帮助!

最佳答案

谢谢大家!我得到了答案。

当抛出异常时,线程就会终止。这里唯一需要注意的是,如果我们在线程本地引用一个线程 ID,如果没有正确清除,可能会导致线程泄漏。

根据 java 文档,线程 ID 可以重复使用。就我而言,我将一些内容放入线程本地引用线程 id (Thread.currentThread.getId) 中。清除该问题的最佳方法是覆盖 afterExecute(java.lang.Runnable, java.lang.Throwable) 并清理其中的内容。

来自java文档:

    public long getId()
Returns the identifier of this Thread. The thread ID is a positive long number generated when this thread was created. The thread ID is unique and remains unchanged during its lifetime. When a thread is terminated, this thread ID may be reused.

关于java - ThreadPoolExecutor 中的线程何时死亡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39025599/

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