Ber*_*ric 9 java rest multithreading java-stream
我正在研究一些处理多个REST调用的java代码
call1()
call2()
call3()
...
Run Code Online (Sandbox Code Playgroud)
我希望并行化这些调用,但同步执行我的主代码.我用lamba和并行流做了一个POC:
List<Runnable> list = new ArrayList();
list.add(() -> {call1()});
list.add(() -> {call2()});
list.add(() -> {call3()});
list.add(...);
list.parallelStream()
.forEach(Runnable::run);
Run Code Online (Sandbox Code Playgroud)
你有其他解决方案吗?我还检查过使用来自Jersey客户端的异步调用,但这需要更多的代码更改.
ern*_*t_k 10
您正在寻找的只是异步运行您的呼叫.您可以使用CompletableFutures提交任务,然后等待它们完成:
list.stream() //you don't really need a parallel stream
.map(CompletableFuture::runAsync)
.collect(Collectors.toList()) //make sure all tasks are submitted
.stream()
.forEach(CompletableFuture::join);
Run Code Online (Sandbox Code Playgroud)
这将提交所有任务(异步运行),然后等待每个任务完成运行.当发生这种情况时,该方法将返回.
您可能需要控制异步任务的线程池.这是一个使用10线程池的示例:
ExecutorService es = Executors.newFixedThreadPool(10);
list.stream()
.map(r -> CompletableFuture.runAsync(r, es))
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
431 次 |
| 最近记录: |