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

实现周期性执行(定时任务)的方法有很多,其中比较常用的方式是使用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日

相关文章

  • Mybatis之@ResultMap,@Results,@Result注解的使用

    Mybatis是一款优秀的ORM框架,它提供了丰富的注解来进行对象和数据库的映射。其中@ResultMap、@Results、@Result三个注解是使用频率较高的几个。下面将详细讲解它们的使用方法及示例。 一、@ResultMap注解的使用 @ResultMap注解用于引用一个已经定义好的resultMap,在查询时用作查询结果集的映射。resultMap…

    Java 2023年5月20日
    00
  • Java之Spring AOP 实现用户权限验证

    下面我就详细讲解一下“Java之Spring AOP实现用户权限验证”的完整攻略。 什么是Spring AOP Spring AOP是Spring框架的一个重要模块,它允许开发者通过声明式方式将横切关注点(如事务管理、安全控制、日志管理等)与业务逻辑代码解耦,在不修改业务逻辑代码的情况下实现这些关注点的添加。 AOP中的术语 在进行Spring AOP开发时…

    Java 2023年5月20日
    00
  • Java Spring Security认证与授权及注销和权限控制篇综合解析

    Java Spring Security认证与授权及注销和权限控制篇综合解析 什么是Java Spring Security? Spring Security是一个基于Spring框架的安全性框架,目的是为了帮助开发者构建安全性的应用。它提供了诸如认证,授权,攻击防御等安全特性。 认证 Spring Security 认证提供了选择、实现不同的认证方式。本节…

    Java 2023年5月20日
    00
  • spring boot 集成 shiro 自定义密码验证 自定义freemarker标签根据权限渲染不同页面(推荐

    Spring Boot 集成 Shiro 在 Spring Boot 中集成 Shiro 需要以下步骤: 引入依赖。在 pom.xml 中添加以下依赖: <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</a…

    Java 2023年5月20日
    00
  • Spring Security基本配置方法解析

    Spring Security基本配置方法解析 Spring Security是一个强大的安全框架,主要用于保护我们的Web应用程序。在本文中,我们将讨论如何使用Spring Security来保护Web应用程序。 添加Spring Security依赖 Spring Security需要添加以下依赖: <dependency> <grou…

    Java 2023年5月20日
    00
  • Spring Boot自定义错误视图的方法详解

    首先我们来讲解一下Spring Boot自定义错误视图的方法。 1.自定义错误页面 Spring Boot内置了一个默认的错误页面,但是当应用程序出现错误时,我们可能需要显示自定义的错误页面。我们可以将所有的默认情况都重定向到我们自己的定制的错误页面。Spring Boot支持非常简单的错误页面定义,可以通过添加一个HTML文件来实现,其中包含错误消息。 例…

    Java 2023年5月27日
    00
  • Java Springboot全局异常处理

    Java Spring Boot 是一个快速开发框架,可以帮助我们快速构建稳定高效的应用程序。在开发应用程序时,往往需要处理一些在运行期间可能发生的异常错误。为了使应用程序更加健壮与可靠,我们需要进行全局异常处理。 一、为什么需要全局异常处理 全局异常处理在应用中非常重要,主要有以下几个原因: 增强用户体验:当应用程序出现异常时,我们可以通过全局异常处理机制…

    Java 2023年5月19日
    00
  • spring hibernate实现动态替换表名(分表)的方法

    关于“spring hibernate实现动态替换表名(分表)的方法”,我们可以通过动态读取配置文件、使用AOP等方式实现,以下是一份完整攻略: 1. 动态读取配置文件 我们可以通过读取配置文件,获取分表策略的配置信息。这些配置信息包含了关于分表规则的全部信息,我们依据这些信息即可实现动态替换表名。 下面是一个示例: 1.1 配置文件 以XML格式作为示例,…

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