ワーカースレッドから呼び出し元に結果を返す

開発者

SOにはいくつかの答えがありますが、明確に理解するためにコードを使用した解決策を探しています。

Executorを使用してワーカースレッドを作成しました。作業を実行した後、ワーカーは結果を呼び出し元に返します(メイン)

ワーカー

public class Worker implements Runnable {

    private final int num;

    public Worker(int num) {
        this.num = num;
    }

    @Override
    public void run() {
        System.out.println("Starting job: " + num);
        try {
            Thread.sleep(2000);
            System.out.println("end job:" + num);

            String result = "result " + num; // how to pass all the results back to the caller

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

労働者テスト

public class WorkerTest {

    private static List<String> result = new ArrayList<>();

    public static void main(String[] args) {
        ExecutorService executorService = Executors.newFixedThreadPool(5);
        for (int i = 0; i < 10; i++) {
            Runnable worker = new Worker(i);
            executorService.execute(worker);
        }
        executorService.shutdown();
        while(!executorService.isTerminated());
    }
}
サンディップ

これが完全なコードですpublicclass WorkerTest {private static List result = new ArrayList <>();

public static void main(String[] args) throws Exception {
    Future[] futures = new Future[10];
    ExecutorService ex = Executors.newFixedThreadPool(5);
    for (int i = 0; i < 10; i++) {
        Callable worker = new Worker(i);

        futures[i] = ex.submit(worker);

    }
    for (int i = 0; i < 10; i++) {
        String resultString = (String) futures[i].get();
        System.out.println(resultString);
    }
    ex.shutdown();
    while (!ex.isTerminated());
}

}

class Worker implements Callable<String> {

private final int num;

public Worker(int num) {
    super();
    this.num = num;
}

@Override
public String call() throws Exception {
    String result = null;
    System.out.println("starting job " + num);
    try {
        Thread.sleep(2000);
        System.out.println("end job " + num);
        result = "result" + num;

    } catch (Exception e) {
        e.printStackTrace();
    }
    return result;
}

}

または、結果をリストに保存する場合は、この方法を実行できます。

public class ExecutorTest {
private static List<String> result = new ArrayList<>();

public static void main(String[] args) throws Exception {
    ExecutorService ex = Executors.newFixedThreadPool(5);
    for (int i = 0; i < 10; i++) {
        Callable worker = new Worker(i);

        Future<String> stringResult= ex.submit(worker);
        String output = stringResult.get();
        result.add(output);
        System.out.println(output);

    }
    ex.shutdown();
    while (!ex.isTerminated());
    System.out.println("All results received frmo executor service ");
    System.out.println(result);
}


}

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

BackgroundWorkerのOnDoWorkは、呼び出し元のスレッドまたはワーカースレッドから呼び出されますか?

分類Dev

呼び出し先サーブレットから呼び出し元jspに制御を送り返す

分類Dev

JavaFX Node.snapshot()は、ワーカースレッドから呼び出されたときにスレッドをフリーズします、アイデア?

分類Dev

関数をループし、結果を元の呼び出しに返すphp

分類Dev

jspページからパラメータを使用してクラスの外部メソッドを呼び出し、結果を返す方法は?

分類Dev

カーネルからのcublas呼び出しにスレッドを使用しますか?

分類Dev

IOCPスレッドからWSAGetLastError()を呼び出すと、誤った結果が返されます

分類Dev

HTA(vbscript)から呼び出し元のバッチファイルに終了ステータスを返す方法

分類Dev

Python PyQT:ワーカースレッドからGUI関数を呼び出す方法は?

分類Dev

他のmathod内でretrofitを呼び出し、結果をメインスレッドに返します

分類Dev

Callableを使用して、ネットワーク呼び出し(HTTP Post)から結果を返し、別のメソッドで使用できるようにする方法

分類Dev

Python / rq-呼び出し元からワーカーに情報を渡す方法は?

分類Dev

Java(Scala)からPHPコードを呼び出し、結果を取得します

分類Dev

呼び出し元のスレッドは、thread.join()の後にローカル変数への変更を確認しますか?

分類Dev

getOAuthTokenは、Googleスプレッドシートから呼び出されるとnullを返します

分類Dev

ホットで待機中のタスクをF#からC#フレームワークの呼び出し元に返すための最も適切な方法

分類Dev

ホットで待機中のタスクをF#からC#フレームワークの呼び出し元に返すための最も適切な方法

分類Dev

dapperの結果から各レコードの関数を呼び出します

分類Dev

ReactNativeピッカーコンポーネントからVueJS呼び出し元に値を渡します

分類Dev

Java:元のスレッドのコンテキストで、別のスレッドからコールバックを呼び出します

分類Dev

Parallel.Foreachでメソッドを呼び出し、結果をスレッドセーフリストに保存します

分類Dev

データベースクエリの結果をExcelに変換し、ajax呼び出しからのダウンロードを許可します

分類Dev

ネットワーク呼び出しの結果が成功した後にのみロードするViewPager

分類Dev

2つのネットワーク呼び出しを並行して(同期)実行し、その結果を比較してから、フラッターモバイルの次のコードに移動します

分類Dev

サービス内のサービスを呼び出して非同期結果を返しますか?

分類Dev

メソッドの結果をメインスレッドに呼び出す

分類Dev

Javaメソッドは、例外をスローしたときにJNI呼び出し元に何を返しますか?

分類Dev

フェッチAPI呼び出し結果内で「this」キーワードを使用する方法

分類Dev

React-API呼び出しの結果を元の関数に返します

Related 関連記事

  1. 1

    BackgroundWorkerのOnDoWorkは、呼び出し元のスレッドまたはワーカースレッドから呼び出されますか?

  2. 2

    呼び出し先サーブレットから呼び出し元jspに制御を送り返す

  3. 3

    JavaFX Node.snapshot()は、ワーカースレッドから呼び出されたときにスレッドをフリーズします、アイデア?

  4. 4

    関数をループし、結果を元の呼び出しに返すphp

  5. 5

    jspページからパラメータを使用してクラスの外部メソッドを呼び出し、結果を返す方法は?

  6. 6

    カーネルからのcublas呼び出しにスレッドを使用しますか?

  7. 7

    IOCPスレッドからWSAGetLastError()を呼び出すと、誤った結果が返されます

  8. 8

    HTA(vbscript)から呼び出し元のバッチファイルに終了ステータスを返す方法

  9. 9

    Python PyQT:ワーカースレッドからGUI関数を呼び出す方法は?

  10. 10

    他のmathod内でretrofitを呼び出し、結果をメインスレッドに返します

  11. 11

    Callableを使用して、ネットワーク呼び出し(HTTP Post)から結果を返し、別のメソッドで使用できるようにする方法

  12. 12

    Python / rq-呼び出し元からワーカーに情報を渡す方法は?

  13. 13

    Java(Scala)からPHPコードを呼び出し、結果を取得します

  14. 14

    呼び出し元のスレッドは、thread.join()の後にローカル変数への変更を確認しますか?

  15. 15

    getOAuthTokenは、Googleスプレッドシートから呼び出されるとnullを返します

  16. 16

    ホットで待機中のタスクをF#からC#フレームワークの呼び出し元に返すための最も適切な方法

  17. 17

    ホットで待機中のタスクをF#からC#フレームワークの呼び出し元に返すための最も適切な方法

  18. 18

    dapperの結果から各レコードの関数を呼び出します

  19. 19

    ReactNativeピッカーコンポーネントからVueJS呼び出し元に値を渡します

  20. 20

    Java:元のスレッドのコンテキストで、別のスレッドからコールバックを呼び出します

  21. 21

    Parallel.Foreachでメソッドを呼び出し、結果をスレッドセーフリストに保存します

  22. 22

    データベースクエリの結果をExcelに変換し、ajax呼び出しからのダウンロードを許可します

  23. 23

    ネットワーク呼び出しの結果が成功した後にのみロードするViewPager

  24. 24

    2つのネットワーク呼び出しを並行して(同期)実行し、その結果を比較してから、フラッターモバイルの次のコードに移動します

  25. 25

    サービス内のサービスを呼び出して非同期結果を返しますか?

  26. 26

    メソッドの結果をメインスレッドに呼び出す

  27. 27

    Javaメソッドは、例外をスローしたときにJNI呼び出し元に何を返しますか?

  28. 28

    フェッチAPI呼び出し結果内で「this」キーワードを使用する方法

  29. 29

    React-API呼び出しの結果を元の関数に返します

ホットタグ

アーカイブ