2013-11-09 241 views
0

在我的場景中,我需要安排一系列任務。例如任務a,b和c應該在1點開始運行,但按照順序插入它們。任務a應該從1點開始,並且任務b應該在任務a完成後開始,無論何時可能。任務c也僅在任務b完成後啓動。如何在計劃任務後執行任務x運行y

我本來希望彈簧的TaskScheduler可能只是安排可運行的列表,但我只能上可運行的時間表:

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

我該怎麼做這樣的事情:

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

任何理念?

+0

這些可能會幫助http://stackoverflow.com/questions/19246310/queuing-schedular-tasks http://stackoverflow.com/questions/13486607/how-to-do-sequential-job-scheduling-quartz – Karthik

回答

3

合理的做法很可能會創造一個Runnable的基本實現運行的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(); 
     } 
    } 
} 
+0

似乎是一個解決方案,但是job2會等到job1完成,還是必須讓他們明確地等待?如果是的話,你會怎麼做? – user817795

+0

@ user817795這將運行Runnable列表中的第一個項目以完成,然後是下一個,就像您的問題中所述。 –

0

如果您使用的ExecutorService只1線程,您可以在可加密列表上使用invokeAll。 Executor的設計方式以及由於只有一個Thread來處理這些任務,這些任務將按給定的順序進行處理。

如果您必須使用Runnables,則需要按照正確的順序循環添加它們。

+0

其多線程應用程序 – user817795