広告

Java : TimeoutException (スレッド) - API使用例

TimeoutException (Java SE 23 & JDK 23) の使い方まとめです。
ほとんどのメソッドにサンプルコードがあります。
APIドキュメントのおともにどうぞ。


概要

ブロック操作がタイム・アウトしたときにスローされる例外です。 タイム・アウトが設定されたブロック操作では、タイム・アウトが発生したことを示す手段が必要です。 このような操作の多くでは、タイム・アウトを示す値を返すことが可能です。不可能な場合や望ましくない場合はTimeoutExceptionを宣言してスローするようにしてください。

クラス構成

TimeoutException はチェック例外です。
スレッドを待機させる操作がタイムアウトしたときに発生します。

try (final var executorService = Executors.newSingleThreadExecutor()) {
    final var future = executorService.submit(() -> {
        try {
            System.out.println("task start");
            TimeUnit.SECONDS.sleep(3);

            return "abcd";
        } catch (InterruptedException e) {
            System.out.println("Interrupted!");
            return null;
        } finally {
            System.out.println("task end");
        }
    });

    TimeUnit.SECONDS.sleep(1);

    try {
        System.out.println("-- get start --");
        final var ret = future.get(1, TimeUnit.SECONDS);

        System.out.println("-- get end --");
        System.out.println("ret = " + ret);
    } catch (TimeoutException e) {
        System.out.println("TimeoutException!");
    }
}

// 結果
// ↓
//task start
//-- get start --
//TimeoutException!
//task end

コンストラクタ

TimeoutException ()

詳細メッセージを指定しないでTimeoutExceptionを構築します。

final var e = new TimeoutException();
System.out.println(e); // java.util.concurrent.TimeoutException

TimeoutException (String message)

指定された詳細メッセージを持つTimeoutExceptionを構築します。

final var e = new TimeoutException("abc");
System.out.println(e); // java.util.concurrent.TimeoutException: abc
System.out.println(e.getMessage()); // abc

Throwableで宣言されたメソッド

addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString

Java API 使用例 : Throwable」をご参照ください。


関連記事

ページの先頭へ