2017-08-01 3 views
1

updateIndex()を1分ごとに実行するために使用しているScheduledExecutorServiceがあります。しかし、最後のリフレッシュと次のリフレッシュの間に1分の間にリソースが変更された場合は、すぐにupdateIndex()を呼び出してから、実行者サービスに通常のスケジュールを再開させてもらいたい。次の更新が1分以内に行われる。しかし、私はドキュメントにこれを行う機能があることを示唆するものは何も見ていません。何か案は?ScheduledExecutorServiceを中断する方法

答えて

1
public static void updateIndex() { 
     Runnable runnable =() -> { 
      //Do your logic here 
     }; 
     ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor(); 
     service.scheduleAtFixedRate(runnable, 0, 1, TimeUnit.MINUTES); 
     } 

JavaDocsの

java.util.concurrent.ScheduledExecutorService.scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit) 

所定の初期遅延の後、続いて所定の周期で最初に有効になる周期的なアクションを作成し、実行によります。つまり、initialDelay、initialDelay + period、initialDelay + 2 * periodの後に実行が開始されます。タスクの実行によって例外が発生すると、後続の実行は抑制されます。それ以外の場合、タスクはエグゼキュータのキャンセルまたは終了によってのみ終了します。このタスクの実行に期間よりも時間がかかる場合、後続の実行は遅く開始されますが、同時に実行されることはありません。

+0

Runnableコマンドの実行間に待機期間があるため、エグゼキュータを中断することはできませんか? \t \tのDateTime CURRENTTIME =新しいのDateTime();; \t \t CURRENTTIME = currentTime.plus(> yourlogicmethod() - – fojalar

+0

あなたは、実行可能な使用scheduledExecuter –

+0

ScheduledFuture スケジューラは= scheduledExecutor \t \t \t \t .scheduleを(()中断することができますscheduler.getDelay(TimeUnit.MILLISECONDS)); –

関連する問題