java实现周期性执行(定时任务)

yizhihongxing

实现周期性执行(定时任务)的方法有很多,其中比较常用的方式是使用Java中的ScheduledExecutorService,下面是完整的攻略:

步骤一:引入依赖

在项目中引入ScheduledExecutorService的依赖,可以使用Maven来管理依赖,添加以下依赖到pom.xml文件中:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>${spring.version}</version>
</dependency>

步骤二:创建定时任务

使用ScheduledExecutorService来创建一个定时任务。可以使用匿名类或者Lambda表达式来实现定时任务,方法定义如下:

public ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit);

其中:

  • command:要定时执行的任务(可以是实现Runnable接口的实例,也可以使用Lambda表达式实现);
  • initialDelay:任务开始执行前的延迟时间;
  • period:任务执行的周期;
  • unit:时间单位,如 TimeUnit.SECONDS 表示秒数。

示例一:使用匿名类实现定时任务

ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

scheduler.scheduleAtFixedRate(new Runnable() {
    public void run() {
        // do something
    }
}, 0, 10, TimeUnit.SECONDS);

示例二:使用Lambda表达式实现定时任务

ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

scheduler.scheduleAtFixedRate(() -> {
    // do something
}, 0, 10, TimeUnit.SECONDS);

步骤三:关闭定时任务

在程序结束时,需要手动关闭定时任务,避免程序一直运行导致内存泄漏。在上面的例子中,执行shutdown()方法即可关闭定时任务。

scheduler.shutdown();

示例:完整的定时任务代码

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

public class ScheduledExecutorServiceDemo {
    public static void main(String[] args) {
        ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

        ScheduledFuture<?> future = scheduler.scheduleAtFixedRate(() -> {
            System.out.println("Current Time: " + System.currentTimeMillis());
        }, 0, 1, TimeUnit.SECONDS);

        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        future.cancel(true);
        scheduler.shutdown();
    }
}

此示例中,定时任务每隔一秒钟输出当前的系统时间,执行5秒后手动关闭定时任务。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java实现周期性执行(定时任务) - Python技术站

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

相关文章

  • java实现文件上传功能

    现在我会为您提供一个详细的java实现文件上传功能的攻略。包括需要用到的技术和代码示例。 技术所需 1. HTML表单 文件上传需要 HTML 表单,因为文件上传是通过 HTTP POST 请求提交的。 表单应该具有:enctype=”multipart/form-data” 属性。 2. Servlet API Servlet API提供了上传文件的功能,…

    Java 2023年5月20日
    00
  • java连接mysql底层封装详解

    Java连接MySQL是Java Web开发中最重要的一个环节。为了方便开发,我们通常会使用Maven或Gradle等构建工具引入一些常用的Java数据库连接库,如JDBC或MyBatis等。这些库本质上都是对Java JDBC API的封装,它们封装了大量的底层API,使我们能够更加方便地操作数据库。本文将围绕着Java连接MySQL展开,对其底层封装进行…

    Java 2023年5月19日
    00
  • Java栈的三种实现方式(完整版)

    Java栈的三种实现方式 什么是栈 栈(Stack)是一种常见的数据结构,它的特点是后进先出(LIFO,Last In First Out),就是存入栈的元素的顺序是先后顺序,最后存入的元素最先取出。栈只允许在栈顶进行插入和删除操作。 在程序中,栈常用于实现递归、函数调用和表达式求值等相关操作。 栈的实现方式 Java语言中,栈的实现通常有以下三种方式: 继…

    Java 2023年5月18日
    00
  • SQL Server 2008 连接JDBC详细图文教程

    SQL Server 2008 连接JDBC详细图文教程 1. 下载驱动程序 在连接 SQL Server 2008 数据库之前,需要先下载并安装相应的 JDBC 驱动程序。可通过以下步骤下载: 进入 Microsoft 官网下载页面; 选择适用于 Java 的 Microsoft JDBC 驱动器版本; 点击“下载”按钮开始下载。 2. 安装驱动程序 下载…

    Java 2023年6月16日
    00
  • Linux下Java开发环境搭建以及第一个HelloWorld

    下面我将详细讲解在Linux操作系统下搭建Java开发环境以及创建第一个“Hello World”程序的完整攻略。 安装Java 首先,我们需要在Linux系统中安装Java。打开终端,输入以下命令来安装Java: sudo apt update sudo apt install default-jdk 这将使用apt包管理器更新软件包列表并安装默认的Jav…

    Java 2023年5月26日
    00
  • 如何解决struts2日期类型转换

    解决struts2日期类型转换问题的完整攻略如下: 问题描述 在使用struts2框架中,如果后台 Action 接收的参数是日期类型,容易出现类型转换异常。例如,在前端页面中,日期类型通常采用字符串格式传递,如“2019-10-01”,但是在后台 Action 中,需要将该字符串转换为日期类型对象,否则无法正确处理业务逻辑。如果日期格式不一致,将会出现类型…

    Java 2023年6月2日
    00
  • 一文理解kafka rebalance负载均衡

    一文理解Kafka Rebalance负载均衡 在Kafka中,消费者组(Consumer Group)中的多个消费者(Consumer)会协同消费一个或多个Topic的分区(Partition)。消费者组通过Partition的分配策略来确定每个消费者负责消费哪些分区。当新的消费者加入或退出消费者组时,需要重新进行分区分配,这个过程被称为Rebalance…

    Java 2023年5月20日
    00
  • SpringCache框架加载/拦截原理详解

    SpringCache框架加载/拦截原理详解 1. 什么是SpringCache? SpringCache是Spring Framework提供的一个缓存框架。使用SpringCache可以很方便地在应用中添加缓存逻辑。 SpringCache和其他缓存框架类似,主要思想是将查询结果缓存起来,当下次查询相同数据时从缓存中读取,从而提高系统性能。SpringC…

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