gpt4 book ai didi

java - ScheduledExecutorService 不会像 Timer 那样结束线程

转载 作者:行者123 更新时间:2023-11-30 03:11:33 24 4
gpt4 key购买 nike

我有2段代码,一个使用ScheduledExecutorService在某个时间执行一个Thread,另一个使用Timer在某个时间执行一个TimerTask。问题是在使用 ScheduledExecutorService 时,即使线程的 run() 到达末尾,监视器程序也表明它仍然处于 Activity 状态(见下图)。另一方面,一旦执行完成,TimerTask 就会结束其线程。

我已将 ScheduledExecutorService 的线程更改为 TimerTask,但收到了相同的结果。如何解决使用 ScheduledExecutorService 时的问题?

计时器:

    TimerTask task = new TimerTask()
{
@Override
public void run()
{
System.out.println("doing something");
}
};

Timer t = new Timer();
t.schedule(task, 250);

Thread count while using Timer

ScheduledExecutorService:

    Thread task = new Thread()
{
@Override
public void run()
{
System.out.println("doing something");
}
};

ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
scheduler.schedule(task, 250, TimeUnit.MILLISECONDS);

Thread count while using ScheduledExecutorService

最佳答案

在第二个代码段中,您创建了一个 Thread 实例,但 ScheduledExecutorService 已将该实例用作 Runnable,即。它只关心它的 run 方法。它实际上并没有启动Thread

ScheduledExecutorService 维护自己的线程来执行任务。对于newSingleThreadScheduledExecutor,这是一个单一的非守护进程Thread。您需要关闭ScheduledExecutorService才能使该线程完成。

javadoc of Timer

After the last live reference to a Timer object goes away and all outstanding tasks have completed execution, the timer's task execution thread terminates gracefully (and becomes subject to garbage collection).

执行完您的TimerTask后,它将完成其内部线程。

关于java - ScheduledExecutorService 不会像 Timer 那样结束线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33534373/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com