ScheduledThreadPoolExecutor の仕組みを理解するのに少し問題があります (SCA を使用しているので、コード内の注釈は気にしないでください)。これは、Scheduler クラスのコードの一部です。
@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());
}
これは Task クラスのコードの一部です。
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 でキャンセルを使用し、スケジューラでシャットダウン メソッドを使用していましたが、スケジューラを停止したくありませんでした。もう少し詳しく説明しましょう。このアプリケーションでは、定期的なタスクをいつでも個別にスケジュール、停止、および再スケジュールする必要があるため、スケジューラ サービス全体をシャットダウンせずに実行を開始した単一のタスクを中断する方法が必要です。私がやろうとしていることを理解していただければ幸いです。何かアドバイスはありますか?ありがとう :)