0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ScheduledFutureのgetの使い道

Posted at

定期実行し続けるScheduledFutureFuture#getてどのように使うのだろうか? という疑問が生じた。なので試してみた。

    ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
    
    AtomicInteger c = new AtomicInteger(0);
    ScheduledFuture<?> future = scheduler.scheduleAtFixedRate(() -> {
      System.out.println(c);
      if (c.get() > 3) {
        throw new RuntimeException();
      }
      c.incrementAndGet();
    }, 0, 500, TimeUnit.MILLISECONDS);
    
    try {
      future.get();
    } catch (ExecutionException ex) {
      System.out.println("finished.");
    }

これを実行すると下記のような実行結果になる。

0
1
2
3
4
finished.

定期実行サービスのスレッドで例外をスローすると、future#getExecutionExceptionスローする。なのでこれをcatchしてメッセージを出力している。

というわけで、定期実行サービスをwatchして失敗したら何らかの後処理を行いたい、という場合に使える。とはいっても、定期実行でそういうユースケースはあまり思いつかない。Future#cancel で停止したいことはあるだろうけど。

参考 : https://stackoverflow.com/questions/25049021/what-is-the-purpose-of-scheduledfuture-get-method-if-is-retrieved-from-the-sch

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?