我们有一个场景,提交给 ThreadPoolExecutor 的任务长时间运行。当线程池启动时,我们以核心池大小 = 5、最大池大小 = 20 和队列大小 10 启动它。在我们的应用程序中,大约有 10 个任务被提交。大多数情况下,这些任务运行几分钟/小时,然后完成。然而,有一种情况是所有 5 个任务都挂在 I/O 上。结果,我的核心池大小达到了最大值,但我的 Threadpoolexecutor 队列未满。所以额外的 5 个任务永远没有机会运行。请建议我们如何处理这种情况?在这种情况下有一个较小的队列更好的选择吗?初始化线程池时,最佳队列大小是多少?
另外关于挂起的任务,有什么办法可以将线程从线程池中拉出来?在这种情况下,至少其他任务将有机会运行。