当前位置: 代码迷 >> 综合 >> 任务调度设计与实现(Timer、Thread、Quartz)
  详细解决方案

任务调度设计与实现(Timer、Thread、Quartz)

热度:44   发布时间:2024-01-26 14:27:30.0

一、概要

1、设计目标:

 * 调度
* 主要功能:立刻执行、延时执行、循环执行

二、实现

设计思路

定义一个接口(ISchedule),来规范行为

实现类来实现 该接口

package spzc.platform.utils.schedule;/*** 调度,接口* @author live* Jan 8, 2019 11:30:18 AM*/
public interface ISchedule {void execute();void execute(long delay);void execute(long delay, long period);void cancel();
}

1、实现方式1 借助Timer类

package spzc.platform.utils.schedule;import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;/*** 基于Timer实现调度* * @author live Jan 8, 2019 11:31:31 AM*/
public class TimerSchedule implements ISchedule {private Timer timer;private TimerTask task;private TimerSchedule() {timer = new Timer();}private TimerSchedule(TimerTask task) {this();this.setTask(task);}public TimerSchedule(Runnable runnable) {this(new TimerTask() {@Overridepublic void run() {try {runnable.run();} catch (Exception e) {e.printStackTrace();}}});}@Overridepublic void execute() {this.execute(0);}@Overridepublic void execute(long delay) {if (this.task != null) {timer.schedule(task, delay);}}@Overridepublic void execute(long delay, long period) {if (this.task != null) {timer.schedule(task, delay, period);}}public TimerTask getTask() {return task;}public void setTask(TimerTask task) {this.task = task;}@Overridepublic void cancel() {timer.cancel();}public static void main(String[] args) {ISchedule s = new TimerSchedule(new Runnable() {@Overridepublic void run() {System.out.println("执行了:" + new Date());}});s.execute(2000,1000);}
}

2、实现方式2 借助Thread类

package spzc.platform.utils.schedule;import java.util.Date;public class ThreadSchedule implements ISchedule {private Thread thread;private volatile boolean allowRun = true;private ThreadSchedule() {}ThreadSchedule(Runnable runnable) {this();setThread(new Thread(runnable));}@Overridepublic void execute() {this.getThread().start();}@Overridepublic void execute(long delay) {execute(delay, -1);}@Overridepublic void execute(long delay, long period) {if (isAllowRun()) {try {Thread.sleep(delay);this.getThread().start();if (period >= 0) {this.getThread();Thread.sleep(period);execute(delay, period);}} catch (InterruptedException e) {e.printStackTrace();}}}@Overridepublic void cancel() {this.setAllowRun(false);}public Thread getThread() {return thread;}public void setThread(Thread thread) {this.thread = thread;}public boolean isAllowRun() {return allowRun;}public void setAllowRun(boolean allowRun) {this.allowRun = allowRun;}public static void main(String[] args) {ISchedule s = new ThreadSchedule(new Runnable() {@Overridepublic void run() {System.out.println("执行了:" + new Date());}});//		s.execute();
//		
//		try {
//			Thread.sleep(2000);
//		} catch (InterruptedException e) {
//			e.printStackTrace();
//		}//		s.execute(2000);s.execute(2000,1000);}
}

3、实现方式三 (待)

开源工具包 Quartz

ScheduledExecutor

开源工具包 JCronTab

  相关解决方案