Java 可运行的内部调度
我正在使用Spring ThreadPoolTaskScheduler执行一项任务,并在Java 可运行的内部调度,java,spring,multithreading,scheduled-tasks,threadpool,Java,Spring,Multithreading,Scheduled Tasks,Threadpool,我正在使用Spring ThreadPoolTaskScheduler执行一项任务,并在run()方法中调度相同的任务,如下所示。通过这样做,我可以确保在当前任务完成后安排下一个任务 public class Task implements Runnable{ @Autowired ThreadPoolTaskScheduler scheduler; public void run() { //some work scheduler.sch
run()
方法中调度相同的任务,如下所示。通过这样做,我可以确保在当前任务完成后安排下一个任务
public class Task implements Runnable{
@Autowired
ThreadPoolTaskScheduler scheduler;
public void run() {
//some work
scheduler.schedule(this, new Date(System.currentTimeMillis() + delay));
}
}
这种方法安全吗?会出现任何并发问题吗?您不应该尝试手动配置下一次执行,而应该使用
ThreadPoolTaskScheduler.scheduleWithFixedDelay(…)
。它与您的代码完全相同,只是更好。您应该使用ThreadPoolTaskScheduler.scheduleWithFixedDelay(…)
,而不是手动配置下一次执行。它与您的代码完全一样,只是更好。我以前检查过这个方法,但我认为我在方法中有更多的控制权,就像我可以在完成和下一次执行之间动态地做一些事情。你是什么意思?我以前检查过这个方法,但我认为我在方法中有更多的控制权,就像我可以在完成和下一次执行之间动态地做些什么你是什么意思,这取决于Task
对象的实例中是否存在内部状态,如果发生这种情况,这些对象的执行重叠可能会损坏,前提是ThreadPoolTaskScheduler
可以同时生成多个线程(即,它没有配置为单个线程池),这取决于Task
对象的实例中是否存在内部状态,如果发生这种情况,则可能会损坏这些对象的执行重叠,前提是ThreadPoolTaskScheduler
可以同时生成多个线程(即未将其配置为单个线程池)。