1

私のシナリオでは、一連のタスクをスケジュールする必要があります。たとえば、タスク a、b、c は 1 時に実行を開始する必要がありますが、順番に挿入します。タスク a は 1 時に開始し、タスク b はタスク a が終了した後に開始する必要があります。タスク c も、タスク b が終了した後でのみ開始されます。

springs Taskscheduler がランナブルのリストをスケジュールできることを望んでいましたが、 Runnable でしかスケジュールできません:

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

どうすればこのようなことができますか:

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

何か案が?

4

2 に答える 2

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();
        }
    }
}
于 2013-11-09T16:09:24.160 に答える
0

Thread が 1 つだけの ExecutorService を使用する場合は、Callables のリストでinvokeAllを使用できます。Executor の設計方法と、これらのタスクを処理するスレッドが 1 つしかないため、これらのタスクは指定された順序で処理されます。

Runnables を使用する必要がある場合は、正しい順序でループ追加する必要があります。

于 2013-11-09T16:58:14.517 に答える