JAVA - ScheduledExecutorService不退出线程

时间:2014-04-24 19:46:40

标签: java multithreading executorservice

我正在使用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);
    }    
}

非常感谢

1 个答案:

答案 0 :(得分:3)

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

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