我比较了CompletableFuture.SupplyAsync()在以下两种情况下的行为:我设置了一个自定义ExecutorService,或者我希望我的供应商由默认的executor(如果没有指定)执行,这两种情况是forkJoinPool.commonpool()
public class MainApplication {
public static void main(final String[] args) throws ExecutionException, InterruptedException {
Supplier<String> action1 = () -> {
try {
Thread.sleep(3000);
}finally {
return "Done";
}
};
Function<String, String> action2 = (input) -> {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
return input + "!!";
}
};
final ExecutorService executorService = Executors.newFixedThreadPool(4);
CompletableFuture.supplyAsync(action1, executorService)
.thenApply (action2)
.thenAccept (res -> System.out.println(res));
System.out.println("This is the end of the execution");
}
}
完成了!!
所以“done”会在主执行结束后打印出来。
但如果我用:
CompletableFuture.supplyAsync(action1)
在这两种情况下
CompletableFuture.supplyAsync(action1, executorService)
.thenApply (action2)
.thenAccept (res -> System.out.println(res));
你不会等待任务完成。但是接下来你的程序要退出了,而常见的fork加入池有何不同:
ForkJoinPool.commonPool()
和定期执行人服务:
final ExecutorService executorService = Executors.newFixedThreadPool(4);
shutdown()方法将允许以前提交的任务在终止之前执行
我想这可能是你问的不同之处。
代码: 我有上面的代码来并行执行一些任务。考虑到已经让调用线程等待完成,不知道它是否应该是而不是块中的。 注意:仅从输入列表中读取。
我正在比较算法(前n个数之和)的顺序和并行性能(使用ForkJoinPool): 我试着用不同的NumLoop来获得不同的值,但顺序法总是表现得更好,而且也是按3-4的顺序。 考虑到阵列大小并不是那么小,并行版本在这里的性能不应该更好吗。
问题内容: 跟进如何在线程池中使用MDC?如何将MDC与?具体来说,我如何在执行任务之前包装一个MDC值? 问题答案: 以下内容似乎对我有用: 和 针对您的任务而不是普通的ForkJoinPool 运行任务。 代替扩展。
问题内容: 我正在使用jsr166y ForkJoinPool在线程之间分配计算任务。但是我显然一定做错了。 如果创建并行度> 1(默认值为Runtime.availableProcessors();我一直在运行2-8个线程)的ForkJoinPool,我的任务就可以正常工作。但是,如果我创建并行度= 1的ForkJoinPool,则在无法预测的迭代次数后会看到死锁。 是的-设置并行度= 1是一种
我使用jaxb进行解组,但当我使用ForkJoinPool execute()方法时,我会得到一个“java.log.ClassNotFoundException:com.sun.xml.internal.bind.v2.ContextFactory”,但我确信在我的运行时类路径中存在,因为当我不使用ForkJoinPool时,它会正常工作。。。你知道这方面的问题或解决方法吗? 我使用Java 1
问题内容: 要并行或异步运行某些内容,我可以使用ExecutorService:或CompletableFuture Api :( 假设在两种情况下我都使用相同的Executor) 除了返回类型vs. 之外,还存在其他显着差异。或什么时候使用什么? 如果我将API与默认值一起使用(没有执行程序的方法)有什么区别? 问题答案: 除了返回类型Future与CompletableFuture之外,还存在