一、概要
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() {
@Override
public void run() {
try {
runnable.run();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
@Override
public void execute() {
this.execute(0);
}
@Override
public void execute(long delay) {
if (this.task != null) {
timer.schedule(task, delay);
}
}
@Override
public 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;
}
@Override
public void cancel() {
timer.cancel();
}
public static void main(String[] args) {
ISchedule s = new TimerSchedule(new Runnable() {
@Override
public 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));
}
@Override
public void execute() {
this.getThread().start();
}
@Override
public void execute(long delay) {
execute(delay, -1);
}
@Override
public 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();
}
}
}
@Override
public 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() {
@Override
public 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