2017-11-21 31 views
0

私はSpring ThreadPoolTask​​Schedulerを使用してタスクを実行していますが、私はrun()メソッド内で以下のように同じタスクをスケジューリングしています。そうすることによって、私は現在のタスクが完了した後に次のスケジュールが設定されていることを確認しています。実行可能ファイル内でのスケジュール

public class Task implements Runnable{ 
    @Autowired 
    ThreadPoolTaskScheduler scheduler; 
    public void run() { 
     //some work 
     scheduler.schedule(this, new Date(System.currentTimeMillis() + delay)); 
    } 
} 

このアプローチは安全ですか?並行性の問題はありますか?

+0

'Task'オブジェクトのインスタンスに内部状態があるかどうかは、' ThreadPoolTask​​Scheduler'によって複数のスレッドが生成されるという仮定の下でそれらの実行が重複して同時に破損する可能性があるかどうかによって異なります(つまり、シングルスレッドプールとして構成されていません)。 –

答えて

2

次の実行を手動で設定する代わりに、ThreadPoolTaskScheduler.scheduleWithFixedDelay(...)を使用する必要があります。それはあなたのコードとまったく同じですが、より良い点を除きます。

+0

前にこのメソッドをチェックしましたが、私は完了と次の実行との間で何かを動的に行うことができるように、私のアプローチではもっとコントロールがあると思っていました。 –

+0

どういう意味ですか? – Kayaman

関連する問題