首页 > 编程语言 >定时任务 Java举例

定时任务 Java举例

时间:2023-12-28 23:33:36浏览次数:37  
标签:Java java util 任务 举例 import 定时 public

在Java中,可以使用多种方式进行定时任务的调度和执行。下面我将举例说明几种常用的定时任务的实现方式:

  1. Timer类:java.util.Timer类可以用于执行定时任务。可以通过创建Timer对象,并使用schedule(TimerTask task, long delay)scheduleAtFixedRate(TimerTask task, long delay, long period)方法来安排定时任务的执行。

    import java.util.Timer;
    import java.util.TimerTask;
    
    public class TimerTaskExample {
        public static void main(String[] args) {
            Timer timer = new Timer();
    
            TimerTask task = new TimerTask() {
                @Override
                public void run() {
                    // 在这里编写定时任务的逻辑
                    System.out.println("定时任务执行!");
                }
            };
    
            // 延迟1秒后执行任务
            timer.schedule(task, 1000);
        }
    }
    
  2. ScheduledExecutorService接口:java.util.concurrent.ScheduledExecutorService接口是一个更灵活、功能更强大的定时任务执行器,可以通过schedule()scheduleAtFixedRate()scheduleWithFixedDelay()方法来安排定时任务的执行。

    import java.util.concurrent.Executors;
    import java.util.concurrent.ScheduledExecutorService;
    import java.util.concurrent.TimeUnit;
    
    public class ScheduledExecutorExample {
        public static void main(String[] args) {
            ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
    
            Runnable task = new Runnable() {
                @Override
                public void run() {
                    // 在这里编写定时任务的逻辑
                    System.out.println("定时任务执行!");
                }
            };
    
            // 延迟1秒后执行任务,然后每隔3秒重复执行
            executor.scheduleAtFixedRate(task, 1000, 3000, TimeUnit.MILLISECONDS);
        }
    }
    
  3. Quartz框架:Quartz是一个功能强大的定时任务调度框架,可以应用于各种Java应用中。它提供了灵活的任务调度配置,支持任务的定时、间隔、CRON表达式等不同类型的触发方式。

    具体使用方式请参考Quartz官方文档和示例代码,这里给出一个简单的示例:

    import org.quartz.*;
    import org.quartz.impl.StdSchedulerFactory;
    
    public class QuartzExample {
        public static void main(String[] args) throws SchedulerException {
            SchedulerFactory schedulerFactory = new StdSchedulerFactory();
            Scheduler scheduler = schedulerFactory.getScheduler();
    
            JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
                    .withIdentity("myJob", "group1")
                    .build();
    
            Trigger trigger = TriggerBuilder.newTrigger()
                    .withIdentity("myTrigger", "group1")
                    .startNow()
                    .withSchedule(SimpleScheduleBuilder.simpleSchedule()
                            .withIntervalInSeconds(10)
                            .repeatForever())
                    .build();
    
            scheduler.scheduleJob(jobDetail, trigger);
            scheduler.start();
        }
    
        public static class HelloJob implements Job {
            public void execute(JobExecutionContext context) throws JobExecutionException {
                // 在这里编写定时任务的逻辑
                System.out.println("定时任务执行!");
            }
        }
    }
    

以上是几种常见的Java定时任务的实现方式。根据具体需求和情况,选择合适的方式来实现定时任务。

标签:Java,java,util,任务,举例,import,定时,public
From: https://blog.51cto.com/u_15473389/9019215

相关文章

  • 无涯教程-Java NIO - DataGramChannel
    JavaNIO数据报用作通道,可以通过较少连接的协议发送和接收UDP数据包。默认情况下,数据报通道处于阻塞状态,也可以在非阻塞模式下使用。为了使其成为非阻塞状态,无涯教程可以使用configureBlocking(false)方法。可以通过调用名为open()的静态方法之一来打开DataGram通道,该方法也可......
  • Java Spring Boot Mybatis-Plus 的简单使用
    此文主要基于官网case整理,如需了解更多详情,请移步官网。环境:SpringBoot:3.1.6JDK:17MySQL:5.7数据准备主要是MySQL建库建表,插入一些数据。建库:CREATEDATABASEmybatis_demo;建表:DROPTABLEIFEXISTS`user`;CREATETABLE`user`(idBIGINTNOTNULLCOMME......
  • 定时器原理及使用
    一、引入在进行并发编程时,有时候会需要定时功能,比如监控某个GO程是否会运行过长时间、定时打印日志等等。GO标准库中的定时器主要有两种:Timer定时器、Ticker定时器。Timer计时器使用一次后,就失效了,需要Reset()才能再次生效。而Ticker计时器会一直生效。二、Timer定时器1)实现原......
  • 无涯教程-Java NIO - 简介
    Java1.4中引入了Java.nio包,引入了用于I/O操作的面向缓冲区和通道的数据流,从而提供了更快的执行速度和更好的性能。NIOAPI还提供了selector选择器,该选择器引入了以异步或非阻塞方式侦听IO事件的多个通道的功能。在NIO中,最耗时的I/O任务将缓冲区填充和释放到操作系统中,从而提高......
  • Java虚拟机内存模型概念
    Java虚拟机内存模型概念  Java虚拟机的内存可以分为三个区域:栈stack、堆heap、方法区methodarea  一、栈stack  1. 栈描述的是方法执行的内存模型,每个方法被调用都会创建一个栈帧(存储局部变量、操作数、方法出口等)  2.JVM为每个线程创建一个栈,用于存放该线程执......
  • JAVA学习12-28 数据类型
    数据类型学习publicclassDemo01{publicstaticvoidmain(String[]args){//单行注释/*多行注释*//*不能用关键字来做标识符*//*标识符可以大写字母,小写字母,美元符号,下划线_开头,不能以关键字作为变量名或方法名,-......
  • Java 实现List反转(reverse)的方法
    ​ List的反转是一种常见的操作,反转List会改变列表中元素的顺序,可以根据具体的需求在程序中实现不同的功能和行为。本文主要介绍Java中实现List反转(reverse)的方法,以及相关的示例代码。1、使用for循环实现使用for循环对List进行倒序遍历,添加到一个List中实现反转。代码示......
  • 无涯教程-Java泛型 - 不允许 重载
    一个类不允许具有两个在类型擦除后可以具有相同签名的重载方法。classBox{//Compilererror//Erasureofmethodprint(List<String>)//isthesameasanothermethodintypeBoxpublicvoidprint(List<String>stringList){}publicvoidprint(Li......
  • 线程安全&&定时器总结
    总结线程线程:执行的独立代码线程执行是靠cpu分配时间片,同一个时间片上只能执行一个线程线程的状态:新建就绪运行阻塞死亡Thread:多线程的类currentThread()getName(),setName()sleep()实现多线程的方式1.继承Thread,重写run2.实现Runnable,重写run实现线程安全......
  • 无涯教程-Java泛型 - 不允许 数组
    不允许使用参数化类型的数组。//无法创建Box<Integer>的通用数组Box<Integer>[]arrayOfLists=newBox<Integer>[2];由于编译器使用类型擦除,因此将type参数替换为对象,并且用户可以将任何类型的对象添加到数组中。并且在运行时,代码将无法引发ArrayStoreException。//编译......