ホーム>source

メソッドから3つのメソッドを呼び出す必要があります。これらの3つのメソッドは、さまざまなRESTサービスまたはSOAPサービスを順番に呼び出します。 これら3つのメソッドの処理を非同期にしたい、つまり、残りの呼び出しとsoap呼び出しは並行して行われます。また、これらのすべてのスレッドが完了するまでメインスレッドが待機し、スレッドが受信したデータに対して何らかの処理を行うようにします。 これを達成する最良の方法は何ですか? 私は次の方法を検討できると思います-

  • フォーク結合(Java 7)
  • 並列ストリーム
  • executorサービス(このシナリオでこれを使用するのが賢明ですか?)

他の方法はありますか? 上記のどの方法が私のシナリオに最適ですか?

あなたの答え
  • 解決した方法 # 1

    エグゼキューターサービス+完了可能な先物

    List<CompletableFuture<SomeResponse>> futures = new ArrayList<>();
    //assign futures to executor
    futures.add(CompletableFuture.supplyAsync(() -> client.perform(request), executor));
    ...
    //create combined future
    CompletableFuture combinedFuture = CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()]));
    //wait for all features to execute or timeout
    combinedFuture.get(50, TimeUnit.SECONDS);
    //go through results
    for (CompletableFuture<SomeResponse> future : futures){
    ...
    }
    
    

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ php - SQL:異なるWHERE原因とGROUP BYのユーザー名を持つ2つのCOUNTを組み合わせる