这个自动任务调度系统的来由是这样的:前段时间,在一个 Java 技术群中,看到一个网友发了一个消息,说:自己在面试中,遇到编写一个具体的自动任务调度系统。并把面试中的那个任务调度系统的需求发到了群中。当时,感觉没有头绪,就没怎么想了。后来感觉吧,还挺有意思的,于是就分析了一下,大致完成了需求中的要求。可能内容比较长,我把提纲先列了出来:

自动任务调度系统

  (1)面试中,具体的项目要求

那位朋友,在面试中,遇到的自动任务调度系统的需求是这样的:

设计一个自动任务调度系统需求:

1. 有三种类型的任务,分别为查询任务、提交任务、同步任务。每种类型任务都有自己的处理方式。       
    一个任务生成线程,每秒钟生成个5任务,每个任务类型是随机选择的三种任务之一。

    1)  查询任务职责:打印“查询任务”+执行到第几条。

    2)  提交任务职责:打印“提交任务”+执行到第几条,并暂停5秒钟。

    3)  同步任务职责:在执行时,每执行三个任务,成功2个,失败一个(抛RuntimeException).
        失败的任务必须在规定的时间后被重新执行,只在第三次执行这个任务时成功。
        成功执行的任务,打印“同步任务”+执行到第几条。
        
2. 任务需要并发执行

3. 任务执行成功,设置任务状态为成功,记录成功时间。

4. 如果任务执行失败,需要根据每种任务类型配置的重试间隔时间重新执行,并记录失败原因。

5. 允许使用的线程数最少5个,最多不超过10个线程。

6. 执行成功的任务不能再次执行。

  (2)自己根据需求做的分析

根据上面的需求,我画了用例图和类图

(2.1)用例图如下:

自动任务调度系统

我将其大致分为两个部分:生成线程和执行线程,复杂的就是执行线程。

(2.2)类图如下:

自动任务调度系统

我从需求中的信息中,抽离出了任务类(Task)、任务类型枚举(TaskTypeEnum)、线程池(ThreadPool)和操作线程类(GenerateThread),在操作线程类中,存在生成线程的方法和执行线程的方法,在执行过程中,任务的执行状态都保存在任务类(Task)的属性中。

  (3)分析后,具体的编程实现

具体的类如下:

(3.1)TaskTypeEnum 枚举

 1 /**
 2  * 0.0.0.1
 3  */
 4 package com.auto.system;
 5 
 6 import java.util.Random;
 7 
 8 /**
 9  * 任务类型的枚举
10  * @author 高青
11  * 2014-5-20
12  */
13 public enum TaskTypeEnum {
14     SELECT("查询任务"), COMMIT("提交任务"), TOGETHER("同步任务");
15     
16     /** 中文名称 */
17     private String CN_NAME; 
18     
19     private TaskTypeEnum(){
20     }
21     
22     /**
23      * 随机得到任务类型
24      * @author 高青
25      * 2014-6-10
26      * @return TaskTypeEnum 任务类型枚举类对象
27      */
28     public static TaskTypeEnum getRandomTaskTypeEnum(){
29         //使用随机数判断
30         Random random = new Random();
31         
32         switch (random.nextInt(3)) {
33         case 0:
34             return TaskTypeEnum.SELECT;
35         case 1:
36             return TaskTypeEnum.COMMIT;
37         default:
38             return TaskTypeEnum.TOGETHER;
39         }
40     }
41     
42     private TaskTypeEnum(String cn_name){
43         this.CN_NAME = cn_name;
44     }
45     
46     public String toString(){
47         return CN_NAME;
48     }
49 }
View Code

相关文章: