ThreadPoolExecutor に送信されたタスクが長時間実行されるシナリオがあります。スレッド プールが開始されると、コア プール サイズ = 5、最大プール サイズ = 20、キュー サイズ 10 で開始します。このアプリケーションでは、約 10 個のタスクが送信されます。ほとんどの場合、これらのタスクは数分または数時間実行されてから完了します。ただし、5 つのタスクすべてが I/O で停止する状況がありました。その結果、コア プール サイズが最大に達しましたが、Threadpoolexecutor キューはいっぱいではありませんでした。そのため、追加の 5 つのタスクを実行する機会がありませんでした。そのようなシナリオをどのように処理できるかを提案してください。このような状況では、キューを小さくする方が良いオプションですか? threadPool を初期化する際の最適なキュー サイズは?
また、ハングしたタスクに関して、スレッドプールからスレッドを引き出す方法はありますか? その場合、少なくとも他のタスクが実行される可能性があります。