Java中四种创建定时任务的方式

在开发中,创建定时任务的方式有很多,下面简单介绍四种常见的方式:Runnable,TimerTask,线程池ScheduledExecutorService,Quartz。

1.使用Runnable

    private static void testRunnable() {
        final long timeInterval = 1000;

        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                while (true) {
                    System.out.println("Hello, XXX " + Thread.currentThread());
                    try {
                        Thread.sleep(timeInterval);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        };

        Thread thread = new Thread(runnable);
        thread.start();
    }

2.使用TimerTask

private static void testTimerTask() {
        TimerTask timerTask = new TimerTask() {
            @Override
            public void run() {
                System.out.println("Hello, " + Thread.currentThread());
            }
        };

        Timer timer = new Timer();
        timer.scheduleAtFixedRate(timerTask, 0, 1500);
    }

3.使用线程池ScheduledExecutorService

    private static void testExecutorService() {
        long initialDelay = 0;
        long period = 1;
        TimeUnit unit = TimeUnit.SECONDS;

        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                System.out.println("Hello, " + Thread.currentThread());
            }
        };

        ScheduledExecutorService service = Executors
                .newSingleThreadScheduledExecutor();
        service.scheduleAtFixedRate(runnable, initialDelay, period, unit);
    }

4.使用Quartz

    private static void testQuartz() throws SchedulerException {
        JobDetail jobDetail = JobBuilder.newJob(MySimpleJob.class).withIdentity("job1", "group1").build();
        //创建触发器,每5秒钟执行一次
        Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1")
        .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(5).repeatForever())
        .build();

        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        Scheduler scheduler = schedulerFactory.getScheduler();

        //将任务及其触发器放入调度器
        scheduler.scheduleJob(jobDetail, trigger);
        //调度器开始调度任务
        scheduler.start();
    }

MySimpleJob如下:

package com.li.test;

import java.text.SimpleDateFormat;
import java.util.Date;

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

/*
 * 实现了org.quartz.Job接口的类
 * 不要和TestTask写在一个文件夹里面,否则execute不会运行。
 */

public class MySimpleJob implements org.quartz.Job {

    public MySimpleJob() {
    }

    public void execute(JobExecutionContext context)
            throws JobExecutionException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS"); 
        System.out.println("MySimpleJob execute-->" + sdf.format(new Date()));
    }
}
posted on 2018-09-17 11:01  lishbo  阅读(1906)  评论(0编辑  收藏  举报