在我们的应用程序中,我们有很多ThreadPoolExecutor
个。当应用程序空闲时,ThreadPoolExecutor
也处于空闲状态,但应用程序中的空闲线程数非常多。
在线程转储中,我发现大多数线程都属于ThreadPoolExecutor
等待任务。是否有任何副作用使这些工作线程保持活力?我应该在setAllowCoreThreadTimeOut()
中使用ThreadPoolExecutor
,以便工作线程在闲置一段时间后死亡吗?
答案 0 :(得分:3)
每个线程都有一个关联的堆栈,需要一些内存(可配置)。如果您的线程处于等待状态(即使它们不是),它们也会保留该内存。它不能用于其他应用程序。因此,停止这些线程(使用setAllowCoreThreadTimeout()
),释放它们保留的内存并让ThreadPoolExecutor
根据需要重新创建它们可能是有意义的。