zoukankan      html  css  js  c++  java
  • 定时任务的多种实现方式

    第一种:监听线程

    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());
        }
    
    }
  • 相关阅读:
    linux下创建和删除软、硬链接
    linux教程:[4]配置Tomcat开机启动
    Linux下Tomcat的启动、关闭、杀死进程
    Linux下Tomcat的安装配置
    Linux安装JDK详细步骤
    每天一个linux命令(30): chown命令
    linux系统修改系统时间与时区
    linux下tar.gz、tar、bz2、zip等解压缩、压缩命令小结
    linux下解压命令大全
    Scoped CSS规范草案
  • 原文地址:https://www.cnblogs.com/XJJD/p/10303029.html
Copyright © 2011-2022 走看看