【发布时间】:2014-09-26 02:23:35
【问题描述】:
根据 ThreadPoolExecutor 文档 (Java ThreadPoolExecutor),如果我像这样创建执行器服务:
new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue);
当#threads > corePoolSize 时,空闲线程将被杀死。当 ThreadPoolExecutor 杀死任何线程时,我想调用一些特定于应用程序的清理代码。我无法找到明确的方法来做到这一点。感谢任何帮助。提前致谢。
【问题讨论】:
-
您是否考虑过为执行器提供您自己的 ThreadFactory 实现,从而创建您自己的“我被杀”——感知线程的实现?
-
我只是查看了实现,我认为覆盖
interrupt开始清理不是您想要的。当工作线程被“杀死”时,ThreadPool 只会放弃引用,而不必调用中断。反之亦然:当中断被调用时,并不意味着线程被杀死。 -
我猜你应该让你的 ThreadFactory 保持对它创建的线程的 WeakReferences 并将它们注册到 ReferenceQueue。当它们难以到达时(所有强引用都被放弃),它们就会被排入队列。这就是我会尝试的。也许有人有更好(更简单)的想法?
-
我从来不需要这个,这让我怀疑你有设计问题。
标签: java multithreading threadpoolexecutor