我有2个ScheduledExecutorService,如下所示:
private ScheduledExecutorService writeToLog = Executors.newSingleThreadScheduledExecutor();
writeToLog.scheduleAtFixedRate(
new Runnable() {
@Override
public void run() {
writeToLog();
}
},
0, 1, TimeUnit.SECONDS
);
但是在运行此执行程序后,当我检查正在运行的线程数时:
int nbRunning = 0;
for (Thread t : Thread.getAllStackTraces().keySet()) {
if (t.getState()==Thread.State.RUNNABLE) nbRunning++;
}
我仍然有7个线程,在此方法之前和之后,这个数目相同的正在运行的线程。这是怎么了我应该有9个线程
答案 0 :(得分:1)
导致该线程调用writeToLog的原因未处于可运行状态。执行写日志后,调度的线程将进入Timed_WAITING状态。但是您已经检查了可运行状态。这就是您没有获得计数增量的原因。