Java 8中的completableFuture是否可扩展到多个内核?

use*_*400 3 java multithreading java-8 completable-future

假设我有一个线程调用返回completablefuture的一堆方法,并说我将所有这些添加到列表中,最后我做了completablefutures.allof(list_size).join()).现在列表中的期货可以扩展到多个核心吗?换句话说是将期货安排到多个核心以利用并行性?

Tag*_*eev 10

CompletableFuture代表与某些人相关的任务Executor.如果未明确指定执行程序(例如,您使用CompletableFuture.supplyAsync(Supplier)而不是CompletableFuture.supplyAsync(Supplier, Executor)),则将common ForkJoinPool用作执行程序.这个池可以ForkJoinPool.commonPool()通过默认获得,并且默认情况下它可以创建与您的系统具有的许多硬件线程一样多的线程(通常是核心数,如果您的核支持超线程,则加倍).所以一般来说,是的,如果您使用所有默认值,那么多个核心将用于您的可完成期货.

  • `CompletableFuture`与任何`Executor`都没有关联.这些只是在一些线程上调度工作的有用方法,最终将完成一个`CompletableFuture`.未来本身与工作或完成工作的线程无关.不要这样框架. (2认同)
  • @ user1870400 _"我在未来包装了一段代码"_不,`CompletableFuture`不是代码的包装器.有创建未来的代码,完成/取消未来的代码和等待未来包装结果的代码.您最有可能提到的是完成未来的代码.只要您不告诉我们如何调用此代码,任何人都无法可靠地回答您的问题. (2认同)