広告

Java : CancellationException - API使用例

CancellationException (Java SE 20 & JDK 20) の使用例まとめです。
だいたいのメソッドを網羅済みです。
API仕様のおともにどうぞ。


概要

FutureTaskなどの値を生成するタスクの結果を、そのタスクが取り消されたために取得できないことを示す例外です。

クラス構成

FutureFutureTask などの非同期タスクから結果を取得するさい、タスクがキャンセルされていて結果が取得できないときに発生する非チェック例外です。

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

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

    TimeUnit.SECONDS.sleep(1);

    System.out.println("-- get start --");
    final var ret = future.get();

    System.out.println("-- get end --");
    System.out.println("ret = " + ret);
}

// 結果
// ↓
//task start
//-- get start --
//task end
//-- get end --
//ret = abcd
try (final var executorService = Executors.newScheduledThreadPool(2)) {
    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");
        }
    });

    // 2秒後にキャンセルします。
    executorService.schedule(() -> {
        System.out.println("future.cancel");
        future.cancel(true);
    }, 2, TimeUnit.SECONDS);

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

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

// 結果
// ↓
//task start
//-- get start --
//future.cancel
//Interrupted!
//CancellationException!
//task end

コンストラクタ

CancellationException ()

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

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

CancellationException (String message)

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

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

Throwableで宣言されたメソッド

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

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


関連記事

ページの先頭へ