Java ScheduledExecutorService在主线程中运行

Java ScheduledExecutorService在主线程中运行,java,android,multithreading,Java,Android,Multithreading,我有两个ScheduledExecutor服务,如下所示: private ScheduledExecutorService writeToLog = Executors.newSingleThreadScheduledExecutor(); writeToLog.scheduleAtFixedRate( new Runnable() { @Override public void

我有两个ScheduledExecutor服务,如下所示:

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个线程。。