<1>中定时器的四种方法

Java中,定时器可以用来定期执行某些操作。Java提供了多种实现定时器的方法,下面分别介绍四种常用的定时器方法。

一、Timer定时器

Timer是Java自带的定时器类,可以使用该定时器在指定时间执行任务。Timer会创建一个线程用来执行任务,可以同时执行多个任务。Timer提供了多个构造方法,其中最常用的是:

```

Timer():创建一个新的定时器,不指定名称,使用默认值执行任务。

Timer(String name):创建一个新的定时器,指定名称,使用默认值执行任务。

Timer(boolean isDaemon):创建一个新的定时器,指定是否为守护线程,使用默认值执行任务。

```

使用Timer创建定时器可以参照以下步骤:

1. 创建Timer对象

2. 创建要定时执行的任务TimerTask

3. 将任务添加到Timer中,调用Timer的schedule方法进行任务的执行

以下是一个使用Timer的例子:

```java

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.Timer;

import java.util.TimerTask;

public class TimerDemo {

public static void main(String[] args) {

Timer timer = new Timer();

TimerTask task = new TimerTask(){

public void run(){

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

System.out.println("当前时间:" + sdf.format(new Date()));

}

};

timer.schedule(task, 0, 1000);

}

}

```

上面的例子中,Timer的schedule方法中传入三个参数,分别是执行的任务,延迟执行时间和执行的周期。其中,延迟执行时间是指从当前时间到任务开始执行的时间间隔,周期是指任务每隔多少时间执行一次。上面的例子中,时间间隔为0,表示立即开始执行,周期为1000ms,表示每隔1秒执行一次。

二、ScheduledExecutorService定时器

ScheduledExecutorService是 Java 并发包(java.util.concurrent包)提供的一种定时器,它的功能比Timer更强大,也更安全可靠。ScheduledExecutorService的核心类ScheduledThreadPoolExecutor实现了定时任务调度,可以执行周期性或延迟的任务。

使用ScheduledExecutorService的步骤为:

1)创建ScheduledExecutorService对象

```

ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);

```

2)设置定时任务

```

scheduledExecutorService.scheduleAtFixedRate(task, 0, 1, TimeUnit.SECONDS);

```

其中,第一个参数为定时任务,第二个参数为初始化延迟时间,即从程序启动到任务开始执行的时间间隔,第三个参数为执行间隔时间,第四个参数为时间单位。上面的例子中,执行间隔时间为1秒。

3)关闭ScheduledExecutorService

```

scheduledExecutorService.shutdown();

```

以下是一个使用ScheduledExecutorService的例子:

```java

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.concurrent.Executors;

import java.util.concurrent.ScheduledExecutorService;

import java.util.concurrent.TimeUnit;

public class ScheduledExecutorServiceDemo {

public static void main(String[] args) {

ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);

Runnable task = new Runnable() {

@Override

public void run() {

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

System.out.println("当前时间:" + sdf.format(new Date()));

}

};

scheduledExecutorService.scheduleAtFixedRate(task, 0, 1, TimeUnit.SECONDS);

}

}

```

三、spring中的task

在Spring中,可以使用Task和Scheduler框架进行定时器的处理,提供了更加灵活和简单的方式。

Task是一个独立的模块,SpringBoot中通过@EnableScheduling注解与@Scheduled注解完成对任务调度的支持。

使用Task的步骤如下:

1)在启动类上添加@EnableScheduling注解

```

@SpringBootApplication

@EnableScheduling

public class BootdemoApplication {

public static void main(String[] args) {

SpringApplication.run(BootdemoApplication.class, args);

}

}

```

2)在需要执行定时任务的方法上添加@Scheduled注解

```

@Scheduled(cron = "0/1 * * * * ?")

```

其中,cron为定时器表达式,表示定时器执行时间。上面的例子中,表示每秒执行一次。

以下是一个使用Task的例子:

```java

import org.springframework.scheduling.annotation.Scheduled;

import org.springframework.stereotype.Component;

import java.text.SimpleDateFormat;

import java.util.Date;

@Component

public class TaskDemo {

@Scheduled(cron = "0/1 * * * * ?")

public void task() {

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

System.out.println("当前时间:" + sdf.format(new Date()));

}

}

```

四、Quartz定时器

Quartz是一款开源的作业调度框架,功能强大,使用广泛。Quartz提供了多种计划任务的方式,如按时间间隔、按指定时间等等。Quartz任务调度器可以支持分布式任务队列,并能够与Spring框架无缝集成。

使用Quartz的步骤如下:

1)导入Quartz的相关依赖包

2)创建job类,实现Quartz提供的接口org.quartz.Job

```

public class MyJob implements Job {

@Override

public void execute(JobExecutionContext context) throws JobExecutionException {

// 需要执行的任务

}

}

```

3)配置job的执行计划

```

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

JobDetail jobDetail = JobBuilder.newJob(MyJob.class) // 这里是自定义的job类

.withIdentity("jobName", "jobGroup")

.build();

Trigger trigger = TriggerBuilder.newTrigger()

.withIdentity("triggerName", "triggerGroup")

.startNow()

.withSchedule(SimpleScheduleBuilder.simpleSchedule()

.withIntervalInSeconds(1)

.repeatForever())

.build();

scheduler.scheduleJob(jobDetail, trigger);

scheduler.start();

```

其中,Trigger为触发器,定义了任务执行的时间规则。例子中的Trigger表示每秒执行一次。

以下是一个使用Quartz的例子:

```java

import org.quartz.*;

import org.quartz.impl.StdSchedulerFactory;

import java.text.SimpleDateFormat;

import java.util.Date;

public class QuartzDemo {

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

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

JobDetail jobDetail = JobBuilder.newJob(MyJob.class) // 这里是自定义的job类

.withIdentity("jobName", "jobGroup")

.build();

Trigger trigger = TriggerBuilder.newTrigger()

.withIdentity("triggerName", "triggerGroup")

.startNow()

.withSchedule(SimpleScheduleBuilder.simpleSchedule()

.withIntervalInSeconds(1)

.repeatForever())

.build();

scheduler.scheduleJob(jobDetail, trigger);

scheduler.start();

}

}

```

综上所述,Java中有多种实现定时器的方法,每种方法都有自己的特点。定时器的选择需要根据实际场景和需求进行选择,没有绝对的最好的定时器方法,只有最适合的定时器方法。

壹涵网络我们是一家专注于网站建设、企业营销、网站关键词排名、AI内容生成、新媒体营销和短视频营销等业务的公司。我们拥有一支优秀的团队,专门致力于为客户提供优质的服务。

我们致力于为客户提供一站式的互联网营销服务,帮助客户在激烈的市场竞争中获得更大的优势和发展机会!

点赞(79) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部