我有 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 个线程
最佳答案
这背后的原因是调用 writeToLog 的线程未处于可运行状态。执行写日志后,被调度的线程会进入Timed_WAITING状态。但是您已经检查了可运行状态。这就是您没有获得计数增量的原因。
关于java - 在主线程中运行的 ScheduledExecutorService,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51376668/