gpt4 book ai didi

java - corePoolSize = 0 的 ScheduledThreadPoolExecutor 在一个 CPU 核心上导致 100% 负载

转载 作者:搜寻专家 更新时间:2023-10-30 21:06:48 24 4
gpt4 key购买 nike

给出的是 ScheduledThreadPoolExecutor 的以下配置每五秒运行一个简单的任务:

int corePoolSize = 0;
ScheduledExecutorService executor = new ScheduledThreadPoolExecutor(corePoolSize);

Runnable task = () -> System.out.println("XXX");
executor.scheduleAtFixedRate(task, 5, 5, TimeUnit.SECONDS);

在 Oracle JRE 1.8.0_66 上,ScheduledThreadPoolExecutor 创建了一个线程,该线程不断地导致一个 CPU 内核 100% 负载。调查线程转储显示以下堆栈跟踪:

"pool-1-thread-1" - Thread t@10
java.lang.Thread.State: RUNNABLE
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.poll(ScheduledThreadPoolExecutor.java:809)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1066)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

corePoolSize = 1 时,池中仍然有一个线程。但是,线程基本上始终处于 TIMED_WAITING 状态,因此处于空闲状态。

ScheduledThreadPoolExecutorcorePoolSize = 0 的行为是已知功能、未经验证的错误配置还是错误?

最佳答案

看起来你已经点击了JDK-8129861已在 Java 9 中修复。它也可能与 JDK-8022642 有关。 .

关于java - corePoolSize = 0 的 ScheduledThreadPoolExecutor 在一个 CPU 核心上导致 100% 负载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34615125/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com