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

yizhihongxing

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种方法超全总结 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • Go Java算法之累加数示例详解

    Go Java算法之累加数示例详解 什么是累加数 累加数是指一个字符串序列,划分成多个数字序列,每个数字序列的数字之和等于后面的数字序列的第一个数字。 例如:112358 是一个累加数,因为 1+1=2, 1+2=3, 2+3=5, 3+5=8,后面的数字序列分别为 1, 2, 3, 5。 算法思路 为了判断一个字符串是否为累加数,我们需要枚举前两个数字,然…

    Java 2023年5月19日
    00
  • 性能调优之java服务器容器调优详解

    性能调优之 Java 服务器容器调优详解 背景介绍 在实际开发中,Java 服务器容器调优是一项非常重要的工作。它可以帮助我们优化服务器的性能,提高应用程序的性能和稳定性。本文将详细介绍 Java 服务器容器调优的完整攻略。 Java 服务器容器调优攻略 调整 JVM 参数 优化 JVM 内存参数 -Xmx 和 -Xms 参数用于指定堆最大和最小值 -XX:…

    Java 2023年5月19日
    00
  • Java利用HttpClient模拟POST表单操作应用及注意事项

    Java利用HttpClient模拟POST表单操作应用及注意事项 前言 在实现Java程序中模拟POST表单操作时,HttpClient是一个非常常用的工具。本文将介绍HttpClient的基本使用方法,以及在模拟POST表单操作时需要注意的一些细节。 HttpClient是什么 HttpClient是一个基于Http协议的开源库,可以通过HttpClie…

    Java 2023年5月19日
    00
  • JavaWeb开发之JSTL标签库的使用、 自定义EL函数、自定义标签(带属性的、带标签体的)

    JavaWeb开发中,JSTL标签库是用来简化代码、提高开发效率的工具。它包括Core、Format、XML、SQL、Functions等多个标签库,可用于处理和展示数据、格式化输出文本、操作XML数据等。 JSTL标签库的使用 JSTL标签库可以在jsp页面中使用,需要引入标签库的命名空间,例如: <%@ taglib uri="http:…

    Java 2023年5月27日
    00
  • Java 网络编程 —— Socket 详解

    构造 Socket 在【客户端/服务端】的通信模式中,客户端需要主动构造与服务器连接的 Socket,构造方法有以下几种重载形式: Socket() Socket(InetAddress address, int port) throws UnknownHostException,IOException Socket(InetAddress address,…

    Java 2023年4月30日
    00
  • SpringBoot集成WebSocket实现前后端消息互传的方法

    下面是 SpringBoot 集成 WebSocket 实现前后端消息互传的完整攻略。 简介 WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。WebSocket 使得浏览器和服务器之间的实时通信变得更加容易。Spring Boot 提供了一个强大的 WebSocket 模块,可以轻松实现 WebSocket 的集…

    Java 2023年5月19日
    00
  • Log4j日志分类和过滤敏感字段的实例

    Log4j是一个常用的Java日志框架,可以帮助我们定位程序运行时的错误以及提高代码的可读性。其中,日志分类和过滤敏感字段是常见的Log4j使用技巧。下面为大家详细讲解这两个方面的实例攻略。 1. 日志分类 在实际项目中,我们往往需要将不同类型的日志记录到不同的文件中,便于快速定位问题。下面是一个日志分类的示例: 首先,我们需要定义不同类别日志的Logger…

    Java 2023年5月20日
    00
  • 实例详解angularjs和ajax的结合使用

    当我们在开发前端网站时,经常需要使用异步请求获取数据来更新网站的内容。同时,随着前端框架的不断发展,AngularJS成为了一款非常流行的前端框架之一。本文将深入探讨AngularJS和AJAX的结合使用,为读者提供使用AngularJS和AJAX来实现异步请求的具体方案。 AngularJS和AJAX AngularJS是由Google开发的一款前端MVC…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部