複数のスレッドでメソッドの戻り値を収集する方法

user4878548

リスト内のすべてのオブジェクトに対して新しいスレッドを開始し、それらに対してメソッドを呼び出しています。私が呼び出すメソッドは、次のように保存したい値を返します。

public int[] benchAll(){
    int[] numbers = new int[things.size()];
    for (final Thing thing: things) {
            final Generator generator = new Generator();

            new Thread(
                () -> generator.benchmark(thing)
            ).start();
            generators.add(generator);
        }
    return numbers;
    }

benchmark()では、このメソッドで返すために、他のスレッドのすべての戻り値を保存するにはどうすればよいbenchAll()ですか?

あなたの助けをいただければ幸いです。

hagrawal

java.util.concurrent.ExecutorServiceJava仕様にあるように使用します。

終了を管理するメソッドと、1つ以上の非同期タスクの進行状況を追跡するためのFutureを生成できるメソッドを提供するエグゼキューター。

したがって、の実装を使用するとExecutorService、指定された数のスレッドですべてのタスクを非同期または同期で実行できます。そのためには、Callableオブジェクトのリストを作成し、それをinvokeAllのオブジェクトのメソッドに渡す必要がありますExecutorServiceinvokeAllメソッドは、Futureオブジェクトのリストのリストを返します(各Futureオブジェクトは各タスクを表し、順序はメソッドにCallable渡されたリストに入力したものと同じですinvokeAll)。これにより、タスクのすべての結果をループして出力できます。

Executorsさまざまなインスタンスを返すクラスの利用可能なすべてのメソッドを読む必要ExecutorServiceあるため、自分に合ったものを選択してください。

このようにして、N個のタスクをM個のスレッドで非同期に実行でき、すべてのスレッドが終了すると、各タスクの完了情報/ステータスを提供するFutureオブジェクトのリストが表示されます。
この結果は、他の結果/データとマージして、メソッドから返すことができます。

以下の疑似例を確認してください。

try {
    List<Callable<Object>> callableList = new ArrayList<Callable<Object>>();
    callableList.add(null); /*Add instance of Callable*/
    callableList.add(null); /*Add instance of Callable*/
    callableList.add(null); /*Add instance of Callable*/

    //Specify how many threads you want or need to operate. Read other methods of Executors which return different instances of ExecutorService
    final ExecutorService service = Executors.newFixedThreadPool(3);

    //This will invoke all your N tasks in specified M threads ...
    List<Future<String[]>> futureObjects = service.invokeAll(callableList);  //futureObjects will contain result of each thread execution
} catch (InterruptedException e) {
    e.printStackTrace();
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

GNU Octaveアサートテストメソッドで複数の戻り値をテストする方法は?

分類Dev

Javaで複数のメソッドの戻り値の最初の非null値を取得するエレガントな方法はありますか?

分類Dev

Python:スレッド関数から複数の戻り値を取得する方法

分類Dev

デバッガーでメソッドの戻り値を編集する

分類Dev

NSubstituteでメソッドの戻り値をスパイする方法

分類Dev

メソッド宣言に複数の戻り値を設定する

分類Dev

複数の非同期メソッド、異なる戻り値の型でWhenAllを使用するのが最適

分類Dev

メソッドからの戻り値を別のメソッドで使用する方法はありますか?

分類Dev

メソッド内のメソッドから戻り値を取得する方法

分類Dev

メソッドに複数の戻り値を持つ複数のifステートメントが含まれている場合に、メソッドから戻り値を取得するにはどうすればよいですか?

分類Dev

複数の戻り値を持つメソッドの使用

分類Dev

複数の戻り値の型を持つメソッド

分類Dev

再帰的メソッドの結果を収集する方法

分類Dev

テンプレートクラスからのメソッドの戻り値の型をtypedefする方法は?

分類Dev

Python:スレッド化された関数から戻り値を収集する

分類Dev

条件付き戻り値型のクラスメソッドを作成する方法

分類Dev

複数のスレッドでメソッドを呼び出す方法

分類Dev

Javaで完全修飾の戻り値の型とメソッド名なしで特定の戻り値の型とメソッド名のみを取得する方法

分類Dev

C#で非静的メソッドからの戻り値を表示する方法

分類Dev

Javaでブールメソッドの戻り値を確認する方法

分類Dev

関数の戻りでstr join()メソッドを使用する

分類Dev

SinonJSのモックメソッドで戻り値をスタブ化する方法

分類Dev

テストでプライベートメソッドの戻り値から値を取得する方法

分類Dev

Spring AOP:戻り値の型がvoidの非同期メソッドで例外を再スローする方法

分類Dev

メソッドの戻り値の型と引数の型を格納する

分類Dev

メソッドからの複数の戻り値の型

分類Dev

メソッド内の複数の戻り値の型?

分類Dev

別のメソッドからメソッドの戻り値の型にアクセスする方法

分類Dev

TypeScript子クラス:親クラスで定義されたメソッドの引数の型と戻り値の型を設定する方法

Related 関連記事

  1. 1

    GNU Octaveアサートテストメソッドで複数の戻り値をテストする方法は?

  2. 2

    Javaで複数のメソッドの戻り値の最初の非null値を取得するエレガントな方法はありますか?

  3. 3

    Python:スレッド関数から複数の戻り値を取得する方法

  4. 4

    デバッガーでメソッドの戻り値を編集する

  5. 5

    NSubstituteでメソッドの戻り値をスパイする方法

  6. 6

    メソッド宣言に複数の戻り値を設定する

  7. 7

    複数の非同期メソッド、異なる戻り値の型でWhenAllを使用するのが最適

  8. 8

    メソッドからの戻り値を別のメソッドで使用する方法はありますか?

  9. 9

    メソッド内のメソッドから戻り値を取得する方法

  10. 10

    メソッドに複数の戻り値を持つ複数のifステートメントが含まれている場合に、メソッドから戻り値を取得するにはどうすればよいですか?

  11. 11

    複数の戻り値を持つメソッドの使用

  12. 12

    複数の戻り値の型を持つメソッド

  13. 13

    再帰的メソッドの結果を収集する方法

  14. 14

    テンプレートクラスからのメソッドの戻り値の型をtypedefする方法は?

  15. 15

    Python:スレッド化された関数から戻り値を収集する

  16. 16

    条件付き戻り値型のクラスメソッドを作成する方法

  17. 17

    複数のスレッドでメソッドを呼び出す方法

  18. 18

    Javaで完全修飾の戻り値の型とメソッド名なしで特定の戻り値の型とメソッド名のみを取得する方法

  19. 19

    C#で非静的メソッドからの戻り値を表示する方法

  20. 20

    Javaでブールメソッドの戻り値を確認する方法

  21. 21

    関数の戻りでstr join()メソッドを使用する

  22. 22

    SinonJSのモックメソッドで戻り値をスタブ化する方法

  23. 23

    テストでプライベートメソッドの戻り値から値を取得する方法

  24. 24

    Spring AOP:戻り値の型がvoidの非同期メソッドで例外を再スローする方法

  25. 25

    メソッドの戻り値の型と引数の型を格納する

  26. 26

    メソッドからの複数の戻り値の型

  27. 27

    メソッド内の複数の戻り値の型?

  28. 28

    別のメソッドからメソッドの戻り値の型にアクセスする方法

  29. 29

    TypeScript子クラス:親クラスで定義されたメソッドの引数の型と戻り値の型を設定する方法

ホットタグ

アーカイブ