一、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