我有2個代碼片段,一個使用ScheduledExecutorService在特定時間執行一個線程,另一個使用Timer在特定時間執行TimerTask。問題是使用ScheduledExecutorService時,即使線程的run()達到最後,監視器程序仍然指示它仍然存在(參見下圖)。另一方面,TimerTask在執行完成後結束其線程。ScheduledExecutorService不會像Timer一樣結束線程
我已將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);
您不提交線程到執行程序服務,您提交runnables。 –