Javaのスレッドプールの拒否ポリシーには、どのようなものがありますか?
Javaのスレッドプールの拒否ポリシーには、以下のようなものがあります。
- ThreadPoolExecutor.AbortPolicyは、デフォルトの拒否ポリシーであり、スレッドプールにタスクを追加できない場合にRejectedExecutionException例外がスローされます。
- ThreadPoolExecutor.CallerRunsPolicy:スレッドプールへのタスク追加に失敗した場合、そのタスクは呼び出し元に返されて実行されます。これによりスレッドプールの処理能力が低下する可能性があります。なぜなら、呼び出し元はタスクが完了するまで待たなければならず、その間は他の処理を続行することができません。
- ThreadPoolExecutor.DiscardPolicy:タスクをスレッドプールに追加できない場合、そのタスクを直ちに破棄し、例外をスローしません。
- ThreadPoolExecutor.DiscardOldestPolicy:スレッドプールへのタスクの追加に失敗した際、最も古いタスクを削除し、再度タスクを追加しようとします。
ThreadPoolExecutorのsetRejectedExecutionHandlerメソッドを呼び出すことで、スレッドプールの拒否方針を設定できます。