Thread实现定时任务
public class TestDemo { private static int count = 0; public static void main(String[] args) { // 基于Thread实现定时任务 Runnable runnable = new Runnable() { @Override public void run() { while (true) { try { // 每隔 1s 执行任务 Thread.sleep(1000); System.out.println(“count: ” + count); count ++; } catch (Exception e) { e.printStackTrace(); } } } }; new Thread(runnable).start(); }}
TimeTask实现定时任务
private static int count = 0;public static void timerTaskTest() { // 基于Thread实现定时任务 TimerTask timerTask = new TimerTask() { @Override public void run() { System.out.println("count: " + count); count ++; } }; // 定义触发规则 Timer timer = new Timer(); // 天数 long delay = 0; // 秒数 long period = 1000; timer.scheduleAtFixedRate(timerTask, delay, period);}
线程池实现定时任务
private static int count = 0;public static void threadSchedulerTest() { // 基于Thread实现定时任务 Runnable runnable = new Runnable() { @Override public void run() { System.out.println("count: " + count); count ++; } }; ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor(); service.scheduleAtFixedRate(runnable, 1, 1, TimeUnit.SECONDS);}
Quartz实现定时任务
引入依赖
<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.1</version></dependency><dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz-jobs</artifactId> <version>2.2.1</version></dependency>
编写任务
public class MyJob implements Job { public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("quartz MyJob date:" + new Date().getTime()); }}
编写调度器
public static void test4() throws Exception { //1.创建Scheduler的工厂 SchedulerFactory sf = new StdSchedulerFactory(); //2.从工厂中获取调度器实例 Scheduler scheduler = sf.getScheduler(); //3.创建JobDetail JobDetail jobDetail = JobBuilder.newJob(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 trigger = TriggerBuilder.newTrigger() .withDescription("") .withIdentity("ramTrigger", "ramTriggerGroup") //.withSchedule(SimpleScheduleBuilder.simpleSchedule()) .startAt(statTime) //默认当前时间启动 .withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ?")) //两秒执行一次 .build(); //5.注册任务和定时器 scheduler.scheduleJob(jobDetail, trigger); //6.启动 调度器 scheduler.start();}