logo

Java における呼び出し可能と将来

Java では、マルチスレッドによりタスクを同時に実行できるため、パフォーマンスと応答性が向上します。従来、開発者は Runnable インターフェイスを使用してタスクを定義していましたが、これには 2 つの大きな制限がありました。それは、結果を返せないことと、チェックされた例外をスローできないことです。これらを克服するために、Java は Java 5 で Callable インターフェイスと Future インターフェイスを導入しました。

呼び出し可能なインターフェース

呼び出し可能なインターフェース は結果を返すタスクを表し、例外をスローする可能性があります。これは Runnable に似ていますが、値を返してチェック例外をスローできるため、より柔軟です。

Java
import java.util.concurrent.*; public class CallableExample {  public static void main(String[] args) throws Exception {  ExecutorService executor = Executors.newSingleThreadExecutor();  Callable<Integer> task = () -> {  int sum = 0;  for (int i = 1; i <= 5; i++) sum += i;  return sum; // returns result  };  Future<Integer> future = executor.submit(task);  System.out.println('Result: ' + future.get());   executor.shutdown();  } } 

出力
Result: 15 

説明: Callable タスクが実行者に送信されます。 1 から 5 までの数値の合計を計算し、結果を返します。結果は、タスクの終了後に future.get() を使用して取得されます。



将来のインターフェース

将来のインターフェース

Java
import java.util.concurrent.*; public class CallableFutureExample {  public static void main(String[] args) {  ExecutorService executor = Executors.newSingleThreadExecutor();  Future<Integer> future = executor.submit(() -> 10 + 20);  try {  Integer result = future.get(); // waits but returns instantly  System.out.println('Result: ' + result);  } catch (Exception e) {  e.printStackTrace();  } finally {  executor.shutdown();  }  } } 

出力
Result: 30 

説明: Callableタスクが計算する10 + 2 and ExecutorService.submit()メソッドはFuture物体。使用するfuture.get()計算が完了すると結果が得られます。

呼び出し可能 vs 未来

特徴呼び出し可能未来
目的 結果を返すタスクを表します非同期タスクの結果を表します
戻り値の型 実行時に結果を返すCallable によって返された結果を保持します。
で定義 java.util.concurrent パッケージjava.util.concurrent パッケージ
実行 ExecutorService に送信されましたExecutorService.submit() によって返される
メソッド call() メソッドが 1 つありますget() isDone() cancel() のようなメソッドがあります
例外処理 チェック例外をスローできる実行後の結果と例外を処理します。
使用法 何を実行するかを定義しますタスクの結果を監視および取得する制御
クイズの作成