[英]ScheduledExecutorService does not end thread like Timer
我有2个代码段,一个使用ScheduledExecutorService在特定时间执行线程,另一个使用Timer在特定时间执行TimerTask。 问题是在使用ScheduledExecutorService时,即使线程的run()到达末尾,监视程序仍指示它仍处于活动状态(请参见下面的图像)。 另一方面,TimerTask在执行完成后结束其线程。
我已经将ScheduledExecutorService的Thread更改为TimerTask,但是收到了相同的结果。 使用ScheduledExecutorService时如何解决此问题?
计时器:
TimerTask task = new TimerTask()
{
@Override
public void run()
{
System.out.println("doing something");
}
};
Timer t = new Timer();
t.schedule(task, 250);
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
实例,但是ScheduledExecutorService
将该实例用作Runnable
,即。 它只关心其run
方法。 它实际上并没有start
Thread
。
ScheduledExecutorService
维护自己的Thread
来执行任务。 使用newSingleThreadScheduledExecutor
,这是一个非守护Thread
。 您需要shutdown
ScheduledExecutorService
才能完成该Thread
。
在最后一个对
Timer
对象的实时引用消失并且所有未完成的任务均已完成执行之后,计时器的任务执行线程会正常终止(并受到垃圾回收的影响)。
执行完TimerTask
,它将完成其内部线程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.