2016-09-13 4 views
0

アジェンダ:私はhttpレスポンスasynchronouslyを取得したいが、その後同期的な方法で作業したい。 私はJerseyクライアントとjersey-rx-client-java8を使用します。 それは私のコードです:私は別のコードを持っているrx形式のJerseyクライアントを使って作業する

ExecutorService executorService = Executors.newSingleThreadExecutor(); 
RxClient<RxCompletionStageInvoker> client = Rx.newClient(RxCompletionStageInvoker.class, executorService); 

Stream<String> urls_stream = Stream.of("stackoverflow.com", "stackoverflow.com"); 
urls_stream.map(url -> { 
    return client 
      .target(url) 
      .request() 
      .rx() 
      .get() 
      .whenComplete((response, throwable) -> { 
       // this should be executed by 1 thread 
       out.println(response.readEntity(String.class)); 
       if (null != throwable) throwable.printStackTrace(); 
      }) 
      .toCompletableFuture(); 
}) 
// Wait completion 
     .collect(Collectors.toList()).forEach(list -> { 
    CompletableFuture.allOf(list).join(); 
}); 

、この例では、より高速まず動作します。

最初の例がより速く動作することをアーカイブしたいと思います(ただし、プール内のスレッドを増やしたくありません)。

+1

達成したいことは明確ではありません。期待していることをさらに説明してください。 –

答えて

0

私が理解しているように、Jerseyは非同期モードでも接続ごとに1つのスレッドを使用します。 1つの解決策はプール内のスレッドの増加だけです。

関連する問題