2011-01-27 5 views
3

私は、定期的な仕事が、TaskScheduler.schedule(Runnable, Trigger)を介してスケジュールされています。定期的なScheduledFutureが現在実行されているかどうかの確認

返されたScheduledFutureがある場合、タスクが現在実行中であるかどうかを確認する方法はありますか?

+0

isRunning()を呼び出してtrueを返すとどういう意味ですか?つまり、私がそれをもう一度呼び出すとそれは真実であるという保証はありません。あなたは何を達成しようとしていますか?モニタリング? –

答えて

2

あなたは、このようなあなたはRunnableを変更することができます。boolean

class Runner implements Runnable{ 
    public volatile boolean RUNNING = false; 
     public void run(){ 

     RUNNING = true; 
     try{ 
      // Your code 
     } finally { 
      RUNNING = false; 
     } 
    } 
} 

編集 思考操作がアトミックであり、揮発性である必要はありません。テストのビットの後

+2

ランニングは揮発性である必要があります –

+2

小さな明確化:ブール値は、原子性を保証するのではなく、変更の可視性を確保するために揮発性である必要があります。これは、言語仕様で説明されているJava Memory Modelの一部です。 –

+0

私はマルチスレッドとメモリモデルについてもっと学ばなければならないと思います... –

7

、魔法のように

public static boolean isRunning(ScheduledFuture future) { 
    return future.getDelay(TimeUnit.MILLISECONDS) <= 0; 
} 

作品。完了後にタスクが再スケジュールされるようだから、getDelay()は負の値を返します。