【读码练习/cron4j】(一)简述Scheduler。

crontable 是*nix下面的一个定时处理的服务。(最小精度是分钟)

一般如下配置:

* * * * * cmd

前面五个*号按顺序分别代表 分钟 小时 日 月 星期。



CRON4J


cron4j是在java下实现类似的功能一个开源框架.主要的类如下。


Scheduler  用来描述整个的调度过程。

Task  用来描述一个命令(cmd)。

SchedulingPattern  用来描述时间样式(* * * * *)。

TaskTable  用来描述一组Pattern/Task配置。

TaskCollector  一个接口,用来分离数据集合(MemoryTaskCollector、FileTaskCollector)和它的表现形式(TaskTable)

TaskExecutor 用来描述一个Task的执行和操作和组织一个Task执行所需的上下文。

SchedulerListener  一个接口,描述TaskExecutor执行的三个时机  Task的执行、执行完成、执行失败。

TaskExecutorListener 一个接口,描述TaskExecutor操作的几个时机。暂停、恢复、停止、中断、状态改变、完成数改变。

LauncherThread 一个Thread的子类。负责检查并执行一组给定的TaskCollector


Scheduler简述


主要的域(field)

daemon 一个Boolean 控制生成的线程是否是守护线程。

started 一个Boolean 表示Scheduler实例的运行状态。

collectors 一个Arraylist 包含Scheduler实例所有的TaskCollector。

memoryTaskCollector 一个TaskCollector的子类。负责管理来自内存的SchedulingPattern/Task

fileTaskCollector 一个TaskCollector的子类。负责管理来自文件的SchedulingPattern/Task

listeners 一个ArrayList。包含所有的SchedulerListener。

launchers 一个ArrayList。包含所有正在运行的LauncherThread。

executors 一个ArrayList。包含所有正在运行的TaskExecutor。

timer 一个线程。每分钟运行检查一次所有的TaskCollector是否可执行。



以一个最简单的Demo解释下运行流程

 1     public static void main(String[] args) {
2 // Prepares the task.
3 MyTask task = new MyTask();
4 // Creates the scheduler.
5 Scheduler scheduler = new Scheduler();
6 // Schedules the task, once every minute.
7 scheduler.schedule("* * * * *", task);
8 // Starts the scheduler.
9 scheduler.start();
10 // Stays alive for five minutes.
11 try {
12 Thread.sleep(5L * 60L * 1000L);
13 } catch (InterruptedException e) {
14 ;
15 }
16 // Stops the scheduler.
17 scheduler.stop();
18 }

第五行, 实例化一个Scheduler会把初始化好的memoryTaskCollector和fileTaskCollector放入collectors。

  以便通过collectors管理所有的SchedulingPattern/Task



第六行,把一个SchedulingPattern/Task加到memoryTaskColletor。

  相对的还是ScheduleFile(File) 方法



第七行,启动scheduler实例

  启动的过程里会初始化executors和launchers(两个管理容器)。并且启动timer。

  timer随后每分钟执行一次检查。从collectors里取出所有的内容交付给一个LauncherThread的实例去处理。

  LancherThread的实例会根据一个时间戳去比较取出来的ScheduringPattern。匹配的就执行Task

  为了更好的控制Task的执行。它会被包装在一个TaskExcutor里。(使之在运行前、运行完毕、运行失败、暂停、恢复、停止等等时机点有更大的扩展空间)



第十七行,结束scheduler实例

  在运行的时候,每一个运行中的lanchuerThread和taskExecutor分别会被加入到launchers和executors。

  所以关闭Scheduler的时候,不仅会中断timer。还会迭代launchers和executors里内容,确保它们也被中断

      

转载于:https://www.cnblogs.com/mattmonkey/archive/2011/08/28/2301548.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值