gpt4 book ai didi

JAVA - ScheduledExecutorService 不退出线程

转载 作者:行者123 更新时间:2023-12-01 23:01:59 24 4
gpt4 key购买 nike

我正在使用 ScheduledExecutorService.scheduleWithFixedDelay() 来安排线程的定期启动。它可以工作,但线程正在 ThreadStackTrace 中累积(处于等待状态)。我确信定期启动的线程已完成,请参阅示例。

有人可以告诉我如何定期启动线程并解决这个问题吗?

class TestThread extends Thread{
@Override
public void run(){
int countThreads = Thread.getAllStackTraces().keySet().size();
int running = 0;
for (Thread t : Thread.getAllStackTraces().keySet()) {
if (t.getState()==Thread.State.RUNNABLE) running++;
System.out.println(t.getName()+" "+t.getState().toString());
}
System.out.println("TotalThreads:"+countThreads+" Running:"+running+"\n\n");
}


}
public class JavaApplication2 {
private static final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(10);

public static void main(String[] args) {
scheduler.scheduleWithFixedDelay(new TestThread(), 0, 10, TimeUnit.SECONDS);
}
}

非常感谢

最佳答案

您创建了一个包含 10 个线程的池。 ExecutorService 将根据需要进行创建并对任务进行排队。线程等待直到任务可用(或准备好执行),其中一个线程收到通知并执行它。您看到的行为似乎表明它的实现方式是为前 10 个任务创建 10 个线程,然后重新使用它们。

不知道你想解决什么问题。

关于JAVA - ScheduledExecutorService 不退出线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23278399/

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