Java : Callable - API使用例

Callable (Java SE 19 & JDK 19) の使用例まとめです。
API仕様のおともにどうぞ。


概要

結果を返し、例外をスローすることがあるタスクです。 実装者は、callという引数のない1つのメソッドを定義します。

クラス構成

Callable は、パラメータなし、戻り値ありの関数型インタフェースです。
Runnable と違い例外を返すこともできます。

主に、サブスレッドの実行などで使われます。

try (final var executor = Executors.newSingleThreadExecutor()) {
    final var task = new Callable<String>() {
        @Override
        public String call() {
            System.out.println("Call!");
            return "abcd";
        }
    };

    System.out.println("-- submit --");
    final var future = executor.submit(task);

    final var ret = future.get();
    System.out.println("get : " + ret);
}

// 結果
// ↓
//-- submit --
//Call!
//get : abcd

メソッド

V call ()

結果を計算するか、計算できない場合は例外をスローします。

final var callable = new Callable<String>() {
    @Override
    public String call() {
        return "abcd";
    }
};

final var ret = callable.call();
System.out.println(ret); // abcd
// 指定のファイルは存在しない環境です。
final var path = Path.of("R:", "java-work", "aaa.txt");
System.out.println(Files.exists(path)); // false

// throwsがある例です。
final var callable = new Callable<String>() {
    @Override
    public String call() throws IOException {
        return Files.readString(path);
    }
};

try {
    System.out.println("-- call --");
    callable.call();
} catch (IOException e) {
    System.out.println(e);
}

// 結果
// ↓
//-- call --
//java.nio.file.NoSuchFileException: R:\java-work\aaa.txt
// ExecutorServiceで使う例です。
try (final var executor = Executors.newSingleThreadExecutor()) {
    System.out.println("-- submit --");
    final var future = executor.submit(() -> {
        System.out.println("Call!");
        return "abcd";
    });

    final var ret = future.get();
    System.out.println("get : " + ret);
}

// 結果
// ↓
//-- submit --
//Call!
//get : abcd

関連記事

ページの先頭へ