当前位置: 首页 > 知识库问答 >
问题:

即使在线程关闭后,活动线程计数也不会减少

刘承悦
2023-03-14

在下面的代码中,线程。activeCount()始终返回2,即使executor中的线程在5秒后终止。

public class MainLoop {
    public static void main(String[] args) throws Exception {
        ExecutorService executor = Executors.newFixedThreadPool(12);
        executor.submit(new Callable<Void>() {
            public Void call() throws Exception {
                Thread.sleep(5000);
                return null;
            }
        });
        while (true) {
            System.out.println(Thread.activeCount());
            Thread.sleep(1000);
        }
    }
}

我期望Thread.activeCount()在5秒后返回1。为什么它总是返回2?

共有1个答案

班思源
2023-03-14

查看newFixedThreadPool的文档。https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Executors.html#newFixedThreadPool(int)

在任何时候,线程最多都是活动的处理任务。池中的线程将一直存在,直到显式关闭。

将可调用对象提交给此执行程序后,它将被池中的一个线程拾取并处理。完成此执行后,线程将在池中闲置,等待下一个可调用对象。

 类似资料:
  • 问题内容: 我有一个Python程序,当我使用退出应用程序时 ,脚本不会关闭。我的过程仍显示在运行的过程中。 为什么python线程不能关闭? 问题答案: 您需要将该线程设为守护程序线程。为此,请在调用线程的init之后添加以下行 当只有守护程序线程处于活动状态时,程序将退出,主线程当然是非守护程序的

  • 问题内容: 我正在学习如何在Android中使用线程,并且为此,我制作了一个播放一系列笔记的小型应用程序。这个想法是,有一个开始按钮和一个结束按钮,(显然)如果您按下开始按钮,它将开始播放音乐,而如果您按下结束按钮,它将停止播放。开始按钮可以正常工作,但是问题是结束按钮不能正常工作。我在找出原因时遇到了麻烦,因此也许有些人可以帮助我。这是代码: 问题答案: 您正在调用正在播放的线程,但此时可能正在

  • 我像这样关闭了我的线程:thesensor.getlooper().quit();TheSensor.quit(); 但我还是得到了下面的错误。我需要做什么来忽略其余的消息?

  • 我正在后台线程中运行数学计算。试图在UITextView中实时发布结果。但是,在后台线程完成之前,结果不会显示。为什么不呢? 我在后台启动了一个方法, 背景线程方法的形式为, 在我开始尝试滚动视图之前,这其实不是什么大问题。慢得令人痛苦。因此,我创建了一个NSTimer来定期滚动UITextView。但是,即使计时器弹出并且方法运行以请求滚动,UITextView也不会滚动,直到后台方法完成。

  • 我从主线程调用了下面的代码,使用ExecutorService池并启动一个线程来处理找到的每个文件。我正在尝试了解当主线程被kill命令终止时ExecutorService的行为。生成的线程会发生什么?一旦完成工作,它们会立即被杀还是终止? 还有没有更好/更安全的方法来编写下面的代码段,特别是如果我在无限循环中运行这部分,例如等待文件被放到输入目录并分配线程来处理它们?在这种情况下,我应该创建一个