51得票5回答
CompletableFuture 的完成处理程序在哪个线程中执行?

我有一个关于CompletableFuture方法的问题: public <U> CompletableFuture<U> thenApply(Function<? super T, ? extends U> fn) 问题在于JavaDoc只是这样说:...

44得票3回答
Java8的ForkJoinPool和Executors.newWorkStealingPool之间的详细区别是什么?

使用以下哪种方法时的低级差异是什么:ForkJoinPool = new ForkJoinPool(X); 和ExecutorService ex = Executors.newWorkStealingPool(X); 其中X是所需并行性水平,即运行的线程。 根据文档,我发现它们相似。此外,请...

35得票4回答
Java-5的ThreadPoolExecutor相比Java-7的ForkJoinPool有什么优势?

Java 5 引入了 Executor 框架,通过线程池支持异步任务执行,其核心是 java.util.concurrent.ThreadPoolExecutor 实现的线程池。Java 7 还添加了一种替代线程池,即 java.util.concurrent.ForkJoinPool。 从...

28得票1回答
Java ForkJoinPool非递归任务,工作窃取是否有效?

我希望通过一种方法将Runnable任务提交到ForkJoinPool中:forkJoinPool.submit(Runnable task) 注意,我使用的是JDK 7。 在底层,它们会被转换为ForkJoinTask对象。 我知道当任务递归地分成较小的任务时,ForkJoinPool非常...

28得票3回答
Java支持三种不同的并发模型。

我正在研究多线程环境下的不同并发模型(http://tutorials.jenkov.com/java-concurrency/concurrency-models.html)。 这篇文章重点介绍了三种并发模型: 并行工作者 第一个并发模型是我所谓的并行工作者模型。传入的作业被分配给...

27得票3回答
官方文档在哪里说明Java的并行流操作使用fork/join?

以下是我对Java 8的Stream框架的理解: 某个东西创建了一个源Stream 实现负责提供BaseStream#parallel()方法,该方法返回可以并行运行其操作的流。 虽然已经有人找到了一种方法来使用自定义线程池来执行Stream框架的并行操作,但我却无法在Java 8...

23得票2回答
什么是ForkJoinPool异步模式?

ForkJoinPool的异步模式是什么意思?Java文档提到,它使得队列(是每个线程的队列吗?)变成了FIFO而不是LIFO。这在实践中意味着什么?

19得票2回答
将并行流调用sequential方法会使之前的所有操作变为顺序执行。

我有一组重要的数据,想先调用一个慢但是干净的方法,然后在第一个方法的结果上调用一个带有副作用的快速方法。我不关心中间结果,因此不想收集它们。 显而易见的解决方案是创建并行流,进行慢速调用,再将流变为顺序执行,最后进行快速调用。问题是,所有代码都在单个线程中执行,实际上没有并行性。 示例代码...

17得票1回答
Java 8并行流和ThreadLocal

我正在努力想出如何在Java 8并行流中复制ThreadLocal的值。 因此,如果我们考虑这个: public class ThreadLocalTest { public static void main(String[] args) { ...

16得票2回答
ForkJoinTask与CompletableFuture的比较

在Java 8中,有两种启动异步计算的方式-CompletableFuture和ForkJoinTask。它们似乎很相似-甚至CompletableFuture的内部类也继承自ForkJoinTask。 是否有理由选择其中一种? 我能看到的一个关键区别是,CompletableFuture...