Java ScheduledExecutorService在主线程中运行
我有两个ScheduledExecutor服务,如下所示:Java ScheduledExecutorService在主线程中运行,java,android,multithreading,Java,Android,Multithreading,我有两个ScheduledExecutor服务,如下所示: private ScheduledExecutorService writeToLog = Executors.newSingleThreadScheduledExecutor(); writeToLog.scheduleAtFixedRate( new Runnable() { @Override public void
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个线程,原因是调用WriteLog的线程未处于可运行状态。执行写日志后,调度线程将进入定时等待状态。但您已经检查了可运行状态。这就是您无法获得计数增量的原因。Ehm。。。为什么是9?writeToLog();may b可能经常调用,但为什么在调用Thread.getAllStackTraces().keySet()时希望它正在运行?我的意思是如果writeToLog();需要几毫秒(Thread.getAllStackTraces().keySet()在1毫秒内执行),如果发现它正在运行,则它是随机的。写后添加记录线程睡眠并再次检查,很可能会找到9个线程。。