我正在使用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);
}
}
非常感谢
答案 0 :(得分:3)
您创建了一个包含10个线程的池。 ExecutorService
将根据需要创建并排队任务。线程等待任务可用(或准备执行),其中一个获得通知并执行它。您看到的行为似乎表明它的实现方式是它将为前10个任务创建10个线程,然后重新使用它们。
我不知道你想要解决什么问题。