一、Timer和Timetask
通过Timer和Timetask,我们可以实现定时启动某个线程。
java.util.Timer
在这种实现方式中,Timer类作用是类似闹钟的功能,也就是定时或者每隔一定时间触发一次线程。其实,Timer类本身实现的就是一个线程,
只是这个线程是用来实现调用其它线程的。
java.util.TimerTask
TimerTask类是一个抽象类,该类实现了Runnable接口,所以该类具备多线程的能力。
在这种实现方式中,通过继承TimerTask使该类获得多线程的能力,将需要多线程执行的代码书写在run方法内部,然后通过Timer类启动线程的执行。
【代码】
/***任务定时调度:Timer类 (相当于闹钟) TimerTask类 (抽象类)* */package cn.sxt.thread;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;import java.util.Timer;import java.util.TimerTask;public class Test_0412_TimeDispatch {public static void main(String[] args) {Timer timer=new Timer();//闹钟//timer.schedule(new MyTask(), 3000);//执行安排。3秒后执行MyTask()类中run方法,仅执行1次//timer.schedule(new MyTask(), 2000,1000);//中间参数:第一次执行的时间,2秒后,每隔1秒执行一次run方法,执行多次//timer.schedule(new MyTask(), new Date(3000),1000);//5秒后,每隔1秒执行一次run方法,执行多次Calendar calendar=new GregorianCalendar(,03,10,00,14,50);//指定04年10日00点14分50秒这个时间来运行程序timer.schedule(new MyTask(), calendar.getTime(),1000);}}//任务类class MyTask extends TimerTask{public void run() {for (int i = 0; i < 5; i++) {System.out.println(i+"->休息一下");}System.out.println("end");}}
二、QUARTZ(石英表)
package cn.sxt.thread;import static org.quartz.DateBuilder.evenSecondDateAfterNow;import static org.quartz.JobBuilder.newJob;import static org.quartz.TriggerBuilder.newTrigger;import org.quartz.JobDetail;import org.quartz.Scheduler;import org.quartz.SchedulerFactory;import org.quartz.Trigger;import org.quartz.impl.StdSchedulerFactory;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.util.Date;public class SimpleExample {public void run() throws Exception {//1、 创建Scheduler的工厂SchedulerFactory sf = new StdSchedulerFactory();//2、从工厂获得调度器Scheduler sched = sf.getScheduler();//3、创建JobDetailJobDetail job = newJob(HelloJob.class).withIdentity("job1", "group1").build();//4、触发器 Date runTime=evenSecondDateAfterNow();Trigger trigger = newTrigger().withIdentity("trigger1", "group1").startAt(runTime).build();// 5、注册任务和触发条件 sched.scheduleJob(job, trigger);//6、启动 sched.start();try {// 5秒后停下Thread.sleep(5L * 1000L);} catch (Exception e) {}sched.shutdown(true);}public static void main(String[] args) throws Exception {SimpleExample example = new SimpleExample();example.run();}}
package cn.sxt.thread;import java.util.Date;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;public class HelloJob implements Job {public HelloJob() {}public void execute(JobExecutionContext context)throws JobExecutionException {System.out.println("---start----");System.out.println("Hello World"+new Date());System.out.println("---end----");}}