黑马程序员技术交流社区
标题:
【上海校区】多线程_任务定时调度(Timer、Timetask和QUARTZ)
[打印本页]
作者:
Wjie
时间:
2019-11-14 10:36
标题:
【上海校区】多线程_任务定时调度(Timer、Timetask和QUARTZ)
一、Timer和Timetask
通过Timer和Timetask,我们可以实现定时启动某个线程。
java.util.Timer
在这种实现方式中,Timer类作用是类似闹钟的功能,也就是定时或者每隔一定时间触发一次线程。其实,Timer类本身实现的就是一个线程,
只是这个线程是用来实现调用其它线程的。
java.util.TimerTask
TimerTask类是一个抽象类,该类实现了Runnable接口,所以该类具备多线程的能力。
在这种实现方式中,通过继承TimerTask使该类获得多线程的能力,将需要多线程执行的代码书写在run方法内部,然后通过Timer类启动线程的执行。
【代码】
/***任务定时调度:Timer类 (相当于闹钟) TimerTask类 (抽象类)
*/
package cn.itcast.demo.com;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Timer;
import java.util.TimerTask;
public class test02 {
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(2019,03,10,00,14,50);
//指定2019年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、创建JobDetail
JobDetail 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----");
}
}
原址: https://www.cnblogs.com/ID-qingxin/p/10680762.html
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2