下面是暂时总结的四种自动任务执行方式
直接看代码了
package job; import java.util.Date; import java.util.Timer; import java.util.TimerTask; import org.quartz.Job; import org.quartz.JobDetail; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SimpleTrigger; import org.quartz.impl.DirectSchedulerFactory; /** * 多种方式实现任务调度 * @author Administrator * */ public class JobTest implements Job { public static void main(String[] args) throws SchedulerException { jobWithQuartz(); // 使用 quartz 框架, 能实现复杂的任务调度 需要下载quartz包, 下面有路径 jobWithTimer(); // 使用java的timer 能实现定时, 周期性的调度 jobWithSleepInThread(); //使用线程 + sheep 实现定周期调用 jobWithSleep(); // 使用无限循环+sleep 实现定时调用 } /** * 使用quartz 框架 * * 原理 * 1, 指定一个执行类(实现Job接口) * 2, 构造一个触发器对象 此对象指明任务执行的规则 定时,周期性等规则 * 3, 把前面两个给调到类(Scheduler), 以便此类调度 * 4, 调度类(Scheduler)的实例使用工厂方法获得 * * @throws SchedulerException */ public static void jobWithQuartz() throws SchedulerException { //构造调到工厂 DirectSchedulerFactory schedulerFactory = DirectSchedulerFactory .getInstance(); //创建调到 必须的 schedulerFactory.createVolatileScheduler(10); Scheduler scheduler = schedulerFactory.getScheduler(); //获取一个实例 //在此处安排任务执行的类--JobTest实现了Job接口 JobDetail job = new JobDetail("name", "group", JobTest.class); //设置任务执行规则 SimpleTrigger trigger = new SimpleTrigger(); trigger.setStartTime(new Date()); trigger.setNextFireTime(new Date( System.currentTimeMillis() + 1000 * 60 * 60)); trigger.setName("trigger name");//必须 trigger.setRepeatCount(1000); trigger.setRepeatInterval(1000); scheduler.scheduleJob(job, trigger); //调到安排 scheduler.start(); //调到开始 } /** * 这是quartz的上面的执行 的方, 实现Job接口 */ public void execute(JobExecutionContext context) throws JobExecutionException { doSomething("jobWithQuartz()"); } /** * 使用java的timer实现简单执行 */ public static void jobWithTimer() { new Timer().schedule(new TimerTask() { @Override public void run() { doSomething("jobWithTimer()"); } }, 0, 1000); //1000执行周期(1秒) } static boolean runNext= true; /** * 线程 + sleep + 无限循环 */ public static void jobWithSleepInThread() { new Thread() { public void run() { for (; runNext;) { doSomething("jobWithSleepInThread()"); try { Thread.sleep(1000L); } catch (InterruptedException e) { e.printStackTrace(); } } } }.start(); // } /** * sleep + 无限循环 */ public static void jobWithSleep() { for (; runNext;) { doSomething("jobWithSleep()"); try { Thread.sleep(1000L); } catch (InterruptedException e) { e.printStackTrace(); } } } public static void doSomething(String method) { System.out.println(method + " : " + Thread.currentThread()); } }
关于 quartz(矿石--石英)框架详解 :
http://www.opensymphony.com/quartz/ //官方网址
http://www.ibm.com/developerworks/cn/java/j-quartz/index.html //IBM中文介绍
关于timer