如何使任务x在计划任务y之后运行

时间:2013-11-09 15:43:02

标签: java spring scheduled-tasks

在我的场景中,我需要安排一系列任务。例如任务a,b和c应该从1点钟开始运行,但是按顺序插入它们。任务a应该从1点开始,任务b应该在任务a完成后开始,无论何时可能。任务c也仅在任务b完成后启动。

我希望弹簧Taskscheduler可以只安排一个可运行的列表,但我只能在Runnable上安排:

taskScheduler.schedule(task, cronTrigger()));

我该怎么做:

taskScheduler.schedule(taskList, cronTrigger()));

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

合理的方法可能是创建运行Runnables列表的Runnable的基本实现,然后将其安排为您的任务,例如:

public class RunnableList implements Runnable {
    private final List<Runnable> delegates;

    public RunnableList(List<Runnable> delegates) {
        this.delegates = new ArrayList<Runnable>(delegates);
    }

    @Override
    public void run() {
        for (Runnable job : delegates) {
            job.run();
        }
    }
}

答案 1 :(得分:0)

如果使用只有1个线程的ExecutorService,则可以在Callables列表中使用invokeAll。 Executor的设计方式以及由于只有一个Thread来处理这些任务,这些任务将按给定的顺序处理。

如果必须使用Runnables,则需要以正确的顺序循环添加它们。