• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:java.util.concurrent.Future get() のタイムアウトを使ったコードが終了しない)

java.util.concurrent.Future get() のタイムアウトを使ったコードが終了しない

このQ&Aのポイント
  • JavaのconcurrentパッケージのFuture#get()メソッドを使ってタイムアウトを設定したコードが正常に終了しない問題が発生しています。
  • concurrentパッケージのFuture#get()メソッドは、指定した時間内に結果を取得できない場合にはTimeoutExceptionをスローしますが、このコードではタイムアウトが発生した場合でも正常に終了しない問題があります。
  • 問題の原因は、コード中で指定されているTIME_BUDGETの値が0であるため、タイムアウトが発生せずに待ち続ける状態になっていることです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

ExecutorServiceをshutdownしていないからじゃないですか?

noname#91531
質問者

お礼

回答ありがとうございます。 Page renderPageWithAd() throws InterruptedException { long endNanos = System.nanoTime() + TIME_BUDGET; Future<Ad> f = exec.submit(new FetchAdTask()); try { Page page = renderPageBody(); Ad ad; try { long timeLeft = endNanos - System.nanoTime(); ad = f.get(timeLeft, NANOSECONDS); } catch (ExecutionException e) { ad = DEFAULT_AD; } catch (TimeoutException e) { ad = DEFAULT_AD; f.cancel(true); } page.setAd(ad); return page; } finally { exec.shutdown(); } } 無事終了するようになりました。 ProKaseifuさん、ありがとうございます。

関連するQ&A