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 つのスレッドが実行されているときに、別のスレッドが同時に実行されるという仕組みです。興味があれば、授業後にさらに詳しく学ぶことができます。