You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java 21中使用newVirtualThreadPerTaskExecutor时平台线程数量是多少?

关于Executors.newVirtualThreadPerTaskExecutor()的平台线程数量问题

当你使用Executors.newVirtualThreadPerTaskExecutor()创建虚拟线程执行器时,没有直接的API可以指定平台线程的数量,因为它默认依赖JVM的虚拟线程调度器,而调度器底层使用ForkJoinPool.commonPool()作为载体平台线程池。

默认平台线程数量的计算逻辑

默认情况下,平台线程的数量等于ForkJoinPool.commonPool()的并行度,其值由JVM自动计算:

  • 公式为 Runtime.getRuntime().availableProcessors() - 1,但如果可用处理器数为1,则并行度固定为1。
  • 对于你的Macbook M1 Pro(假设是10逻辑核心),默认平台线程数会是9;如果是8逻辑核心则为7。你可以通过ForkJoinPool.commonPool().getParallelism()代码直接验证当前数值。

如何自定义平台线程数量

如果你需要手动指定平台线程数,有两种可行方式:

  1. 通过系统属性修改commonPool并行度:
    在启动Java程序时添加JVM参数,例如:

    java -Djava.util.concurrent.ForkJoinPool.common.parallelism=4 YourMainClass
    

    这会将平台线程数强制设置为4。

  2. 自定义调度器平台线程池:
    若不想依赖默认的commonPool,可以自行创建ForkJoinPool或ThreadPoolExecutor作为虚拟线程的调度器,示例代码如下:

    // 创建并行度为4的自定义平台线程池
    ForkJoinPool customPool = new ForkJoinPool(4);
    // 创建绑定该平台线程池的虚拟线程工厂
    ThreadFactory virtualThreadFactory = Thread.ofVirtual().scheduler(customPool).factory();
    // 构建自定义虚拟线程执行器
    ExecutorService customExecutor = Executors.newThreadPerTaskExecutor(virtualThreadFactory);
    

内容的提问来源于stack exchange,提问作者Mangat Rai Modi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 13:53:19