Java实现定时器的4种方法超全总结

定时器在Java中是非常常用的功能,可以实现定时任务、周期性任务等多种功能。下面我们将介绍Java实现定时器的四种方法。

Java实现定时器的4种方法超全总结

定时器在Java中是非常常用的功能,可以实现定时任务、周期性任务等多种功能。下面我们将介绍Java实现定时器的四种方法。

1. Timer类

Java内置的Timer类可以实现简单的定时器功能,具体使用方式如下示例:

import java.util.Timer;
import java.util.TimerTask;

public class TimerExample {

    public static void main(String[] args) {

        TimerTask task = new TimerTask() {
            public void run() {
                System.out.println("Timer Task executed!");
            }
        };

        Timer timer = new Timer("Timer");
        timer.schedule(task, 3000);

    }

}

在上面的示例中,我们定义了一个TimerTask对象,实现了run方法输出一行信息,然后创建了一个Timer对象并调用了schedule方法,参数为我们定义的task对象和延时时间。

2. ScheduledExecutorService类

Java 5之后出现的ScheduledExecutorService类也可以实现定时器功能,并且比Timer类更加灵活和可靠。具体使用方式如下示例:

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class ScheduledExecutorServiceExample {

    public static void main(String[] args) {

        Runnable task = new Runnable() {
            public void run() {
                System.out.println("ScheduledExecutorService Task executed!");
            }
        };

        ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
        scheduler.schedule(task, 3000, TimeUnit.MILLISECONDS);

    }

}

在上面的示例中,我们定义了一个Runnable对象,实现了run方法同样输出一行信息,然后创建了一个ScheduledExecutorService对象并调用了schedule方法,参数为我们定义的task对象、延时时间和时间单位(毫秒)。

3. Quartz框架

Quartz是一款开源的定时器框架,可以实现复杂的定时任务、集群调度等功能。具体使用方式如下:

首先需要导入Quartz的依赖项:

<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.3.2</version>
</dependency>

然后可以创建一个Job类实现任务逻辑:

public class ScheduledJob implements Job {

    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        System.out.println("Quartz Job executed!");
    }

}

最后创建一个Quartz调度器并创建任务调度:

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

public class QuartzExample {

    public static void main(String[] args) throws SchedulerException {

        JobDetail job = JobBuilder.newJob(ScheduledJob.class)
                .withIdentity("job1", "group1")
                .build();

        Trigger trigger = TriggerBuilder.newTrigger()
                .withIdentity("trigger1", "group1")
                .startAt(new Date(System.currentTimeMillis() + 3000))
                .withSchedule(SimpleScheduleBuilder.simpleSchedule()
                        .withIntervalInSeconds(5)
                        .repeatForever())
                .build();

        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
        scheduler.scheduleJob(job, trigger);
        scheduler.start();

    }

}

在上面的示例中,我们创建了一个JobDetail和Trigger对象,分别表示任务和触发器,然后创建了一个Scheduler对象并调用了scheduleJob方法,参数为我们定义的job和trigger对象。

4. Spring任务调度

Spring也提供了一款定时器框架,可以实现注解式、XML配置式和方法调用式三种任务调度方式,具体使用方式如下:

首先需要导入Spring的依赖项:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.2.7.RELEASE</version>
</dependency>

然后可以通过注解实现任务调度:

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class SpringTask {

    @Scheduled(fixedDelay = 3000)
    public void springTask() {
        System.out.println("Spring Task executed!");
    }

}

在上面的示例中,我们使用@Scheduled注解标记了一个方法,并设置了固定的延时时间。

总结

通过上述4种Java实现定时器的方法,可以满足大部分定时任务的需求。其中,Timer和ScheduledExecutorService适合于简单的定时任务,Quartz和Spring任务调度适合于复杂的任务调度。

本文标题为:Java实现定时器的4种方法超全总结