【发布时间】:2015-07-19 12:40:39
【问题描述】:
下面代码中提到的每个“CompletableFuture.runAsync”都会进行一些计算,我希望每次调用“CompletableFuture.runAsync”时都能得到结果。或者换句话说,我希望每个“future0,future1,future2,future3”分别包含每次调用“CompletableFuture.runAsync”的结果
我该怎么做。
*更新:
我的要求是,对于每次对 CompletableFuture.runAsync 的调用,我都会进行一些计算,并且应该返回这些值的 ArrayList。在对 CompletableFuture.runAsync 的四次调用之后,我想对返回的 ArrayLists 进行一些进一步的计算。
代码:
if (this.laplaceImgList != null) {
if (!this.laplaceImgList.isEmpty()) {
if (this.laplaceImgList.size() == 3) {
//executor
ExecutorService orintMapExe;
CompletableFuture<Void> future0 = null;
CompletableFuture<Void> future1 = null;
CompletableFuture<Void> future2 = null;
CompletableFuture<Void> future3 = null;
orintMapExe = Executors.newFixedThreadPool(1);
future0 = CompletableFuture.runAsync(new orintMapRun(SysConsts.ORINT_DEG_ZERO , this.laplaceImgList), orintMapExe);
future1 = CompletableFuture.runAsync(new orintMapRun(SysConsts.ORINT_DEG_45 , this.laplaceImgList), orintMapExe);
future2 = CompletableFuture.runAsync(new orintMapRun(SysConsts.ORINT_DEG_90 , this.laplaceImgList), orintMapExe);
future2 = CompletableFuture.runAsync(new orintMapRun(SysConsts.ORINT_DEG_135 , this.laplaceImgList), orintMapExe);
CompletableFuture.allOf(future0,future1,future2,future3).join();//blocks the main thread till future0, and future1 finishes
【问题讨论】:
-
orintMapRun在做什么?请粘贴代码。 -
@akhil_mittal 它是可运行的类
-
如果你想返回一些结果,你应该使用
Callable。为什么需要CompletableFuture?这可以通过将任务提交给执行器服务来完成。 -
@akhil_mittal 那么,我需要的只是将可运行对象更改为可调用对象?
-
我们一般用
futures来表示一些其他线程运行的代码。但是,如果您想创建一个Future来表示您知道会发生的某个事件,但您没有任何基于此未来的异步作业,那么您可以使用CompletableFuture,它将在该事件上完成。
标签: java multithreading threadpool executorservice countdownlatch