定时任务是软件开发中经常遇到的问题。简单的定时任务只需要在固定时间触发它的执行就可以了。但是对于复杂的定时任务,可能是由多个任务组成一个任务组,它们之间存在依赖关系,一个任务执行的条件,必须是它的前置任务已经执行成功(或者没有前置任务),它才可以执行。例如下面这幅图:
图中任务的依赖关系为:
任务1:依赖2,5
任务2:依赖3,4
任务3:无依赖
任务4:无依赖
任务5:无依赖
任务6:依赖2
这个任务关系图其实就是“有向无环图”(简称DAG)这种数据结构。图是由一系列顶点和连接顶点的边组成的数据结构。它分为有向图和无向图。有向图的边是有方向的,即A->B这条边和B->A是两条不同的边,而无向图中,A->B和B->A是共用一条边的。基于这种数据结构,我们可以用图的顶点表示一个任务,而图的边表示任务之间的依赖关系,就可以基于有向无环图来实现任务调度。
本文基于有向无环图实现了一个简单的任务调度系统的demo。
1.定义一个Executor接口
public interface Executor {
boolean execute();
}
这个接口代表一个可执行的任务,execute代表任务的执行。</