
1. コンセプト
Future は、完了していない可能性がある非同期タスクの結果を表し、タスクの実行が成功または失敗した後に、対応する操作を実行するためにこの結果にコールバックを追加できます。
2. 将来のインターフェース
Future インターフェイスは、5 つの主要なインターフェイス メソッドを定義します。RunnableFuture と ScheduleFuture はこのインターフェイスを継承し、CompleteFuture と ForkJoinTask はこのインターフェイスを継承します。
3. 例
パッケージテスト。
インポート java.util.concurrent.Callable;
インポートjava.util.concurrent.ExecutionException;
インポート java.util.concurrent.FutureTask;
パブリック クラス CallableFutureTest {
public static void main(String[] args) {
長い startTime = System.currentTimeMillis();
Callable<Integer> CalcableCallable = new Callable<Integer>() {
@オーバーライド
public Integer call() が例外をスローする {
// TODO 自動生成されたメソッド スタブ
Thread.sleep(2000); //シミュレーションにかかる時間 int result = 1+2;
結果を返します。
}
};
FutureTask<Integer> CalculateFutureTask = new FutureTask<>(calculateCallable);
スレッド t1 = 新しいスレッド(calculateFutureTask);
t1.start();
//ここで Thread に参加して、リモート呼び出しをシミュレートし、その計算結果 (ネットワーク計算機など) に依存する時間のかかるサービスを実行します。
試す {
//時間のかかるタスクをシミュレートします。マルチスレッドの利点を反映して、メインスレッドが独自の処理を実行します Thread.sleep(3000);
int a = 3+5;
整数の結果 = CalculateFutureTask.get();
System.out.println("result = "+(a+result));//サブスレッドのlongに依存してメインスレッドの実行結果をシミュレートします。 endTime = System.currentTimeMillis();
System.out.println("time = "+(endTime-startTime)+"ms");
} catch (InterruptedException | ExecutionException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
}
}上記からわかるように、実際には、Future を使用せずにスレッドの結果に依存する場合、これは主にメインスレッドの sleep(3000) に費やされる時間です。必要な時間は 5 秒(サブスレッド 2 秒 + メインスレッド 3 秒) になる可能性があります。
以上が Java における Future のスレッド結果の取得方法ですが、大まかに言えば、1 つのスレッドが実行されているときに、別のスレッドが同時に実行されるという仕組みです。興味があれば、授業後にさらに詳しく学ぶことができます。