异步执行多个java方法,并在完成任务时获得结果

异步执行多个java方法,并在完成任务时获得结果,java,multithreading,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(...);

如何异步执行多个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(...);
}
for(int i=1;i System.out.println(kur(i))或System.out.println(异常e)
Info kur(int i)引发异常{
//做点什么
返回新信息(…);
}
我也可以使用spring boot。我检查了这个:但它与我的情况不同

你能帮我吗?

(原始答案)也许安能帮你

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);
列出(原始答案)也许安能帮助你

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);

Listbtw如果我在IntStream之后放置某个内容,那么它将在流结束之前执行。如何放置例如logger.info(“完成”)流中的所有内容都完成了吗?如果您在等待终止调用后立即记录一些内容,您可以确保所有内容都已完成。请小心-1分钟超时是任意的。如果您有长时间运行的作业,您可能需要等待更长的时间!问题是我有许多不同时间的作业,我无法计算time需要完成所有作业。我有2个线程,它们将用于1000个作业,每个作业都有2秒。最好的方法是在forEach语句中计算作业数,当计数器在1000时等待,再等待20秒,然后关闭执行器。或者如果我可以加入所有这些线程,当所有线程我的日志已经完成了,但我不知道如何执行这些操作?我添加了一个带有“穷人的解决方案”的编辑,让您可以等待一切完成!这是我们在英国使用的一个短语,意思是“非常简单,非常愚蠢,可能不是做某事的最有效或最聪明的方式-但是,嘿,它起作用了!”顺便说一句,如果我在IntStream之后放一些东西,它会在流结束之前执行。我如何放例如logger.info(“完成”)流中的所有内容都完成了吗?如果您在等待终止调用后立即记录一些内容,您可以确保所有内容都已完成。请小心-1分钟超时是任意的。如果您有长时间运行的作业,您可能需要等待更长的时间!问题是我有许多不同时间的作业,我无法计算time需要完成所有作业。我有2个线程,它们将用于1000个作业,每个作业都有2秒。最好的方法是在forEach语句中计算作业数,当计数器在1000时等待,再等待20秒,然后关闭执行器。或者如果我可以加入所有这些线程,当所有线程我的日志已经完成了,但我不知道如何执行这些操作?我添加了一个带有“穷人的解决方案”的编辑,让您可以等待一切完成!这是我们在英国使用的一个短语,意思是“非常简单,非常愚蠢,可能不是做某事的最有效或最聪明的方式-但是,嘿,它起作用了!”