多線程_任務定時調度(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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM