【发布时间】:2014-04-25 03:49:57
【问题描述】:
我正在使用 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);
}
}
非常感谢
【问题讨论】:
-
考虑
implements Runnable而不是extends Thread
标签: java multithreading executorservice