首页 > 编程知识 正文

可实现多少个任务的调度,任务调度机制

时间:2023-05-05 13:44:41 阅读:198033 作者:2977

 

下面是暂时总结的四种自动任务执行方式

直接看代码了

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() {@Overridepublic 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

http://gceclub.sun.com.cn/Java_Docs/jdk6/html/zh_CN/api/java/util/Timer.html#scheduleAtFixedRate(java.util.TimerTask, java.util.Date, long)

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。