第一种:监听线程
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()); } }