私はSpring ThreadPoolTaskSchedulerを使ってタスクを実行していますが、同じタスクを内部でスケジュールしています。 run()
以下のような方法です。そうすることで、現在のタスクが完了した後に次のタスクがスケジュールされるようにします。
public class Task implements Runnable{
@Autowired
ThreadPoolTaskScheduler scheduler;
public void run() {
//some work
scheduler.schedule(this, new Date(System.currentTimeMillis() + delay));
}
}
このアプローチは安全ですか、並行性の問題はありますか?
回答:
回答№1は2次の実行を手動で設定しようとする代わりに、あなたは使うべきです ThreadPoolTaskScheduler.scheduleWithFixedDelay(...)
。それはあなたのコードがしていることと全く同じです。