1。説明と物語を説明します
マルチスレッドの下でプログラミングするとき。必要に遭遇する可能性があります。つまり、スレッドが終了すると、各スレッドで返されたデータを同時に取得してから、統一処理を実行したい場合があります。この要件の下では、将来と呼び出し可能な組み合わせが非常に利用されます。
一部の人々は、この要件を完了するために同期を使用できると言うかもしれませんが、通常の場合は実際に可能です。しかし、特別なケースでは、それは機能しません:
複数のスレッドがいくつかのデータを同期して計算できるようにしたことを想像してください。しかし、誰もがスレッドがリソースを競うことを知っています。複数のスレッドを有効にしてデータの計算を同期させる場合。実際、スレッド間の計算順序はヌルにすることはできません。もちろん、大きな間違いを犯さない限り、それに対処することは不可能ではありません。そのような場合。 FutureとCallableの組み合わせが最良の選択です。
2。サンプルの例
これらの2つのカテゴリの例は、実際には、主に実際の使用で使用できるかどうかに応じて非常に簡単です。コード:
パッケージテスト; java.util.concurrent.callable; import java.util.concurrent.executionexception; import java.util.concurrent.executorservice; import java.util.concurrent.executors; import java.util.concurrent.future; public class featurecallabletest {private static executorservice service = executors.newfixedthreadpool(100); private static int count = 1; public static void main(string [] args)throws arturtedexception、executionexception {int sum = 0; for(int i = 0; i <100; i ++){future <integer> future = service.submit(new callable <integer>(){@override public integer call()throws {system.out.println(thread.currentthread()getname()); return ++ count;}); int f = future.get(); sum += f; System.out.println( "Future is" + f); } system.out.println( "sum is" + sum); service.shutdownnow(); }}