首页 > 技术文章 > Java任务调度框架----kunka

lknny 2016-08-23 18:02 原文

初衷

  1. 工作中用到了很多框架,但是给我印象最深的还是我们PO(Product Owner)在若干年前写的一套任务调度框架,在JDK1.4之前,concurrent包还没有引入,
    手写的这套Token调度,去年我们依然在使用,并且满足了商用软件的各种要求。
  2. 框架本身是可行的,但是也存在一些问题,比如,技术陈旧、互相引用、层次冗杂、不易读等。
  3. 前车之鉴,并且结合我涉及的另外一套内部框架(读写框架),我想重新设计并实现一套新的任务调度框架。
  4. 取名为kunka,纯属雷同,并且i really have fun to do this.

概念

  1. Task,任务,最小调度和执行单位,执行内容,用户自定义
  2. Executor,执行器,执行Task,根据执行方式分为,串行执行器,并发执行器,定时执行器,多子任务执行器等
  3. Dispather,调度器,负责调度,将Task放放入Executor,有自己的生命周期
  4. TaskManager, 任务管理中心,单例,负责管理所以进入待调度的Task,并管理任务状态,并提供任务中断接口
  5. TaskListener,任务监听器,Task状态变动时,会通知监听器

框架调度流程

  1. 用户实现一个Task,并实现对任务状态变更的TaskListener,其中ID要对应
  2. 用户根据需要,选择一种执行器Executor
  3. 用户将Task、TaskListener和Executor放入到TaskManager中
  4. 调度器开始运作,执行器接受到调度器分发的Task,并执行
  5. Task状态变更时,通知所有注册的TaskListener
  6. 调度器会在生命周期结束时,自动关闭,同时关闭相关的执行器

接口说明

Task
    /**
     *     任务执行内容
     */
    abstract public void runTask();

    /**
     *  任务超时处理
     */
    abstract public void timeOutAction();
    
    /**
     *  任务结束时,后置处理
     */
    abstract public void taskFinished();

推荐阅读