java - 在主线程中运行的 ScheduledExecutorService

标签 java android multithreading

我有 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/

相关文章:

javascript - 如何使html在android浏览器的webview上填充全屏高度

java - 奇怪的 SQLite 行为 - 非功能性 UPDATE SQLite 方法

java - Java 可以自动包装一个对象并作为抛出异常的一部分抛出吗?

NDK android studio 中的 java.lang.UnsatisfiedLinkError

android - 如何在 Android 中使用 DownloadManager 检测要下载的文件的扩展名?

Java线程正在重复 Swing 形式

java - 获取空数组而不是随机生成的整数数组

java - Firebase 应用程序可以在模拟器上运行,但不能在真实的 Android 设备上运行?

node.js - 仅在 NodeJs 上构建网站,并且 Express 阻止通过 http 的请求

c++ - Tinyxml 多任务