java - 异步执行多个java方法并获取完成工作的结果

标签 java multithreading

如何异步执行多个java方法并获取每个方法的工作结果? 可以说我有这个:

for(int i=1; i<=10000; i++) {
    kur(i);
}

//on kur(i) finish -> System.out.println(kur(i)) or System.out.println(Exception e)


Info kur(int i) throws Exception {
   //do some stuff
   return new Info(...);
}

我也可以使用 Spring Boot。我查了一下:https://spring.io/guides/gs/async-method/但这与我的情况不同。

你能帮我吗?

最佳答案

(原始答案)也许是 ExecutorService可以帮助你吗?

ExecutorService executorService = Executors.newFixedThreadPool(10);

IntStream.rangeClosed(1, 10000)
         .forEach(i -> {
             executorService.submit(() -> {
                 try {
                     System.out.println(kur(i));
                 } catch (Exception e) {
                     // do something useful here - remember you're in a separate thread
                     //
                     // this is not useful.
                     e.printStackTrace();
                 }
             });
         });

executorService.shutdown();
executorService.awaitTermination(1, TimeUnit.MINUTES);

(使用穷人的解决方案进行编辑,等待一切完成):

    ExecutorService executorService = Executors.newFixedThreadPool(10);

    List<Future<?>> futures = IntStream.rangeClosed(1, 10000)
                                       .mapToObj(i -> {
                                           return executorService.submit(() -> {
                                               try {
                                                   System.out.println(kur(i));
                                               } catch (Exception e) {
                                                   // do something useful here - remember you're in a separate thread
                                                   //
                                                   // this is not useful.
                                                   e.printStackTrace();
                                               }
                                           });
                                       })
                                       .collect(Collectors.toList());

    for (Future<?> f : futures) {
        f.get();
    }

    executorService.shutdown();
    executorService.awaitTermination(1, TimeUnit.MINUTES);

关于java - 异步执行多个java方法并获取完成工作的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55152184/

相关文章:

java - EMR Spark 在 java main 中工作,但不在 java 函数中工作

java - 如何设置正确的Bean类路径

java - Selenium 的登录问题

java - 有限的多线程操作

cgo 与使用线程本地存储的 C 库交互

c++ - 防止竞争条件

java - 创建仅采用值作为参数的方法,该方法实现 Comparable<T>

java - 我无法让我的按钮工作

c++ - 标记为 std::memory_order_seq_cst 的单个原子操作是否会在各处触发顺序一致性?

c# - 几个小时后并行发送 HTTP 请求后 ServicePoint 对象的大小很大