定时任务的多种实现方式

第一种:监听线程

package com.jump.task;

/**
 * @author Jump
 * @version 创建时间:2019年1月22日 上午10:04:14 
 * 监听线程实现定时任务
 */
public class Demo01 {
    static long count = 0;

    public static void main(String[] args) {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                while (true) {
                    try {
                        Thread.sleep(1000);
                        count++;
                        System.out.println(count);
                    } catch (Exception e) {
                        // TODO: handle exception
                    }
                }
            }
        };
        Thread thread = new Thread(runnable);
        thread.start();

    }

}

第二种:TimerTask

package com.jump.task;

import java.util.Timer;
import java.util.TimerTask;

/**
 * @author Jump
 * @version 创建时间:2019年1月22日 上午10:36:23 
 * TimerTask实现定时任务
 */
public class Demo02 {
    static long count = 0;

    public static void main(String[] args) {
        TimerTask timerTask = new TimerTask() {

            @Override
            public void run() {
                count++;
                System.out.println(count);
            }
        };
        Timer timer = new Timer();
        // 天数
        long delay = 0;
        // 秒数
        long period = 1000;
        timer.scheduleAtFixedRate(timerTask, delay, period);
    }

}

第三种:ScheduledExecutorService

package com.jump.task;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

/**
 * @author Jump
 * @version 创建时间:2019年1月22日 上午10:40:25 
 * ScheduledExecutorService实现定时任务
 */
public class Demo03 {
    public static void main(String[] args) {
        Runnable runnable = new Runnable() {
            public void run() {
                // task to run goes here
                System.out.println("Hello !!");
            }
        };
        ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
        // 第二个参数为首次执行的延时时间,第三个参数为定时执行的间隔时间
        service.scheduleAtFixedRate(runnable, 1, 1, TimeUnit.SECONDS);
    }

}

第四种:quartz

启动类:

package com.jump.controller;

import java.util.Date;

import org.quartz.CronScheduleBuilder;
import org.quartz.Job;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

/**
 * @author Jump
 * @version 创建时间:2019年1月22日 上午10:51:53 
 * 启动类
 */
public class App {
    public static void main(String[] args) throws SchedulerException {
        // 1.创建Scheduler的工厂
        SchedulerFactory sf = new StdSchedulerFactory();
        // 2.从工厂中获取调度器实例
        Scheduler scheduler = sf.getScheduler();

        // 3.创建JobDetail
        JobDetail jb = JobBuilder.newJob((Class<? extends Job>) MyJob.class).withDescription("this is a ram job") // job的描述
                .withIdentity("ramJob", "ramGroup") // job 的name和group
                .build();

        // 任务运行的时间,SimpleSchedle类型触发器有效
        long time = System.currentTimeMillis() + 3 * 1000L; // 3秒后启动任务
        Date statTime = new Date(time);

        // 4.创建Trigger
        // 使用SimpleScheduleBuilder或者CronScheduleBuilder
        Trigger t = TriggerBuilder.newTrigger().withDescription("").withIdentity("ramTrigger", "ramTriggerGroup")
                // .withSchedule(SimpleScheduleBuilder.simpleSchedule())
                .startAt(statTime) // 默认当前时间启动
                .withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ?")) // 两秒执行一次
                .build();

        // 5.注册任务和定时器
        scheduler.scheduleJob(jb, t);

        // 6.启动 调度器
        scheduler.start();

    }
}

Job类:

package com.jump.controller;

import java.util.Date;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

/**
 * @author Jump
 * @version 创建时间:2019年1月22日 上午10:51:05 
 * 定时任务
 */
public class MyJob implements Job{
    public void execute(JobExecutionContext context) throws JobExecutionException {
        System.out.println("quartz MyJob date:" + new Date().getTime());
    }

}
原文地址:https://www.cnblogs.com/XJJD/p/10303029.html