Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 可运行的内部调度_Java_Spring_Multithreading_Scheduled Tasks_Threadpool - Fatal编程技术网

Java 可运行的内部调度

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

我正在使用Spring ThreadPoolTaskScheduler执行一项任务,并在
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
可以同时生成多个线程(即未将其配置为单个线程池)。