我在理解ScheduledThreadPoolExecutor如何工作(我使用SCA,所以不用打擾代碼中的註釋)時遇到了一些小問題。這部分的代碼從我的調度器類:使用ScheduledThreadPoolExecutor時中斷和重啓任務
@AllowsPassByReference
public ScheduledFuture<?> schedule(Task task)
{
future=scheduler.scheduleAtFixedRate(task.getRunnableContent(), task.getDelay(), task.getPeriod(), TimeUnit.MILLISECONDS);
return future;
}
@AllowsPassByReference
public void deschedule(Task task)
{
scheduler.remove(task.getRunnableContent());
}
而這部分代碼從我的任務等級:
public void scheduleTask()
{
if(!running)
{
future=scheduler.schedule(this);
running=true;
}
}
public void descheduleTask()
{
if(running)
{
future.cancel(mayInterruptIfRunning);
scheduler.deschedule(this);
running=false;
}
}
現在,這裏的大問題!我看到的所有地方在ScheduledFutures上使用cancel,然後在調度器上使用shutdown方法,但我不想停止調度器。讓我更好地解釋一下:在這個應用程序中,定期任務必須隨時調度,停止和重新調度,所以我需要一種方法來中斷一個任務,一旦它開始運行而不關閉整個調度程序服務。我希望你能理解我想要做什麼,有什麼建議?謝謝:)
感謝您的回答,至少現在我知道我遇到的問題必須與SCA如何管理我的課程有關 – user2163438 2013-03-13 03:26:08