私は、スレッドプールがあります。Javaのスレッドプールタスクのタイムアウト問題
ThreadPoolExecutor pool = new ThreadPoolExecutor(cores, 50, 30L, TimeUnit.SECONDS, new ArrayBlockingQueue<>(3000));
をそして私は実行します。
try {
pool.execute(() ->
{
//Very very long task, fetching from an external URL
});
}catch(Exception e){
e.printStackTrace();
}
私は例外を取得することはありませんが、このコードは数分待ちます。 30秒以内にキャンセルするにはどうすればよいですか?
注:あなたはこの方法でスレッドを中断することはできません。スレッドを中断するだけで、この割り込みを尊重するのはあなたが呼び出すライブラリです。あなたは、それが提供するAPIを使用してタスクを失敗させることで、基礎となる要求を直接クローズすることをお勧めします。 –