首页 > 编程语言 >java 添加一个定时任务 可关闭

java 添加一个定时任务 可关闭

时间:2023-07-20 15:32:21浏览次数:33  
标签:java Timer 任务 添加 ScheduledExecutorService 定时 执行 public

Java中的定时任务与可关闭性

在开发过程中,经常会遇到需要定时执行某些任务的场景,比如定时发送邮件、定时备份数据库等。Java提供了多种方式来实现定时任务,其中最常用的是使用Timer类和ScheduledExecutorService接口。本文将介绍如何使用这两种方式实现定时任务,并且使其可关闭。

使用Timer实现定时任务

Timer类是Java提供的用于执行定时任务的类,它是基于线程的,可以按照指定的时间间隔周期性地执行任务。下面是使用Timer类实现定时任务的代码示例:

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

public class TimerExample {
    private Timer timer;

    public void startTask() {
        timer = new Timer();
        TimerTask task = new TimerTask() {
            @Override
            public void run() {
                // 定时任务的具体逻辑
                System.out.println("定时任务执行");
            }
        };
        // 每隔1秒执行一次任务
        timer.schedule(task, 0, 1000);
    }

    public void stopTask() {
        if (timer != null) {
            timer.cancel();
        }
    }

    public static void main(String[] args) {
        TimerExample example = new TimerExample();
        example.startTask();

        // 等待一段时间后停止任务
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        example.stopTask();
    }
}

在上面的示例中,首先创建了一个Timer实例,然后定义了一个继承自TimerTask的匿名内部类作为定时任务的具体逻辑,其中的run方法就是定时任务的执行逻辑,这里只是简单地输出一条信息。通过调用timer.schedule(task, 0, 1000)方法,将任务添加到定时器中,并指定了任务的首次执行时间和执行间隔时间。

需要注意的是,Timer类是单线程的,如果一个任务的执行时间超过了下一个任务的执行时间,将会影响后续任务的执行时间。另外,Timer类对异常的处理方式是直接终止所有任务的执行,因此在使用Timer类时需要额外注意线程安全和异常处理。

使用ScheduledExecutorService实现定时任务

ScheduledExecutorService接口是Java提供的用于执行定时任务的接口,它基于线程池,可以更好地控制任务的执行。下面是使用ScheduledExecutorService接口实现定时任务的代码示例:

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

public class ScheduledExecutorExample {
    private ScheduledExecutorService executor;

    public void startTask() {
        executor = Executors.newSingleThreadScheduledExecutor();
        Runnable task = new Runnable() {
            @Override
            public void run() {
                // 定时任务的具体逻辑
                System.out.println("定时任务执行");
            }
        };
        // 每隔1秒执行一次任务
        executor.scheduleAtFixedRate(task, 0, 1, TimeUnit.SECONDS);
    }

    public void stopTask() {
        if (executor != null) {
            executor.shutdown();
        }
    }

    public static void main(String[] args) {
        ScheduledExecutorExample example = new ScheduledExecutorExample();
        example.startTask();

        // 等待一段时间后停止任务
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        example.stopTask();
    }
}

在上面的示例中,首先创建了一个ScheduledExecutorService实例,通过Executors.newSingleThreadScheduledExecutor()方法创建一个单线程的线程池。然后定义了一个Runnable接口的匿名内部类作为定时任务的具体逻辑,其中的run方法就是定时任务的执行逻辑,这里只是简单地输出一条信息。通过调用executor.scheduleAtFixedRate(task, 0, 1, TimeUnit.SECONDS)方法,将任务添加到线程池中,并指定了任务的首次执行时间和执行间隔时间。

ScheduledExecutorService接口相比于Timer类更加灵活和可靠,它提供了更多的定时任务调度方法,并且能够更

标签:java,Timer,任务,添加,ScheduledExecutorService,定时,执行,public
From: https://blog.51cto.com/u_16175477/6786935

相关文章

  • java 文件上传 文件名乱码
    Java文件上传:文件名乱码的问题在Java开发中,文件上传是一个常见的需求。然而,有时候我们会遇到文件名乱码的问题。这篇文章将介绍文件名乱码的原因,并提供一些解决方案。1.问题描述在Java文件上传过程中,文件名乱码可能会出现在两个地方:浏览器端和服务器端。浏览器端的文件名乱码通......
  • Java学习day07: 小练习
    题目1为二次方程式$ax^2+bx+c=0$设计一个名为QuadraticEquation的类,这个类包括:代表三个系数的私有数据域a、b和c;一个参数为a、b和c的构造方法;数据域a、b和c的三个get/set方法;一个名为getDiscriminant()的方法返回判别式,$b^2-4ac$;一个名为getRoot1()和getRoot2()的......
  • Java使用snmp协议采集服务器信息
    Java使用snmp协议采集服务器信息  一.snmp简介 SNMP是专门设计用于在IP网络管理网络节点(服务器、工作站、路由器、交换机及Hubs等)的一种标准协议,它是一种应用层协议。SNMP使网络管理员能够管理网络效能,发现并解决网络问题以及规划网络增长。通过SNMP接收随机消息(及......
  • java rmi上传下载512字节OutputStream
    /*JADXINFO:Accessmodifierschangedfrom:protected*/publicfinalvoiddownloadFile(Parameterparameter,OutputStreamout)throwsXException{if(!this.session.isEffective()){thrownewXException(10000000,"连接会话无效&......
  • [Javascript] [] is ArrayList
    Runthefollowingcode,foundthatfor get&push&pop,itisO(1)time;Butfor shift/unshfit,itisO(n)time.Inthiscases,Javascript's[],isaArrayList,everytimeyoudoshiftorunshiftitneedtomovetherestofitemsbyoneoffw......
  • JAVA小白找工作必备建议
    如果您是一名刚入门的JAVA小白,正在寻求工作机会,那么恭喜您来对地方!本文将为您提供一些建议,帮助您在求职过程中更好地展现自己的优势和准备迎接新的挑战。1.基础知识打牢在找工作前,务必确保您对JAVA编程语言的基础知识有很好的掌握。熟悉面向对象编程(OOP)、数据结构和算法,是成为一......
  • 【Java面试题】Spring是如何解决循环依赖问题?
    ......
  • 【项目实战】Java 开发 Kafka 生产者
    ......
  • 【项目实战】Java 开发 Kafka 消费者
    ......
  • java 多线程
    多线程1.进程与线程线程和进程计算机中的两个重要概念,用于管理和执行程序的执行单元1.1进程进程是资源分配的最小单位,通过进程可以创程序的应用。进程是操作系统的一个执行实例,代表了正在运行的程序的一个实例,其有自己的独立的内存空间,包代码、数据、和堆栈等。进程......