Java 实现定时任务的四种方式
2016-11-03 18:25
886 查看
Java 实现定时任务的四种方式
实现定时任务有多种方式,下面简单介绍我所了解的几种实现方式吧,Timer、ScheduledExecutorService和普通的线程等待都在实际工作中使用过,对于Quartz没有太多的了解,需针对自己的使用环境决定使用哪一个合适。Coding…一、线程等待(不建议使用,任务复杂时存在内存泄露风险
public class TestThreadWait { public static void main(String[] args) { Thread myThread = new Thread(new Runnable() { @Override public void run() { while (true) { System.out.println("TestThreadWait is called!"); try { // 使用线程休眠来实现周期执行 Thread.sleep(1000 * 3); } catch (InterruptedException e) { e.printStackTrace(); } } } }); myThread.start(); } }
**二、Timer**
public class TestTimer { public static void main(String[] args) { TimerTask task = new TimerTask() { @Override public void run() { System.out.println("TimerTask is called!"); } }; Timer timer = new Timer(); /* * schedule 和 scheduleAtFixedRate 区别: * 可将schedule理解为scheduleAtFixedDelay, * 两者主要区别在于delay和rate * 1、schedule,如果第一次执行被延时(delay), * 随后的任务执行时间将以上一次任务实际执行完成的时间为准 * 2、scheduleAtFixedRate,如果第一次执行被延时(delay), * 随后的任务执行时间将以上一次任务开始执行的时间为准(需考虑同步) * * 参数:1、任务体 2、延时时间(可以指定执行日期)3、任务执行间隔时间 */ // timer.schedule(task, 0, 1000 * 3); timer.scheduleAtFixedRate(task, 0, 1000 * 3); } }
**三、ScheduledExecutorService**
public class TestScheduledExecutorService { public static void main(String[] args) { Runnable runnable = new Runnable() { public void run() { System.out.println("ScheduledExecutorService Task is called!"); } }; ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor(); // 参数:1、任务体 2、首次执行的延时时间 // 3、任务执行间隔 4、间隔时间单位 service.scheduleAtFixedRate(runnable, 0, 3, TimeUnit.SECONDS); } }
**四、Quartz**
public class TestQuartz { public static void main(String[] args) { try { Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); scheduler.start(); JobDetail job = newJob(Job.class) .withIdentity("job", "group").build(); // 休眠时长可指定时间单位,此处使用秒作为单位(withIntervalInSeconds) Trigger trigger = newTrigger() .withIdentity("trigger", "group").startNow() .withSchedule(simpleSchedule().withIntervalInSeconds(3).repeatForever()) .build(); scheduler.scheduleJob(job, trigger); // scheduler.shutdown(); } catch (SchedulerException se) { se.printStackTrace(); } } } class Job implements org.quartz.Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("Quartz task is called!"); } }
* 如内容存在错误,欢迎指正
相关文章推荐
- Java 实现定时任务的四种方式
- Java实现定时任务的三种方式
- Java实现定时任务的3种方式
- Quartz定时任务(纯java方式实现)
- java中的定时任务实现的几种方式
- java 定时任务的几种实现方式
- JAVA实现定时任务的几种方式
- Java实现定时任务的3种方式
- Java实现定时任务的三种方式
- java实现定时任务的三种方式
- java中实现定时任务的方式详解
- java定时任务实现的几种方式
- java--定时任务的实现方式
- JAVA定时任务实现的几种方式
- java定时任务的实现方式
- 两种方式实现java定时器,使用quartz定时器框架和java自带Timer定时器,编写定时任务
- java定时任务实现的几种方式
- 七、java实现定时任务的三种方式
- java定时任务的两种实现方式
- java作业调度、定时任务实践(三种实现方式)