Java超过指定时间之后触发定时任务事件

本文介绍了两种在Java中实现定时任务的方式:一是利用JAVA自带的TimerTask,通过构造方法设置任务并指定执行时间;二是利用Redis监听key过期,当key过期时触发任务。
摘要由CSDN通过智能技术生成

方式一:使用JAVA自带的定时任务(推荐)

工具类
import java.util.TimerTask;

/**
 * @author lcw
 * @date 2023-06-17 8:29 AM
 * @description
 */

public class TimerTaskUtil extends TimerTask {

    private final String messageId = "";
    //自己的services
    private MessageUtil messageUtil;
	//可传入多个参数,使用构造方法传入

    public TaskTimeOutWarn() {
    }

    public TaskTimeOutWarn(String id, MessageUtil messageUtil) {
        this.id = id;
        this.messageUtil = messageUtil;
    }

    @Override
    public void run() {
        // 执行任务
        Object message = messageUtil.getById(id);
       //TODO
    }
}
调用:
import java.util.Timer;

Timer timer = new Timer();
TimerTaskUtil ttu= new TimerTaskUtil(mw.getId(),messageUtil);
timer.schedule(ttu,60 * 1000);//60*1000为多少分钟后执行

方式二:使用redis,监听key过期实现

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java 有很多方法可以实现定时任务。 下面是几种常见的方法: 1. 使用 `java.util.Timer` 和 `java.util.TimerTask` 类。 例如: ``` import java.util.Timer; import java.util.TimerTask; public class Main { public static void main(String[] args) { Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { System.out.println("定时任务开始执行"); } }, 0, 1000); // 这里表示每隔 1000 毫秒执行一次 } } ``` 2. 使用 `java.util.concurrent.ScheduledExecutorService` 接口和 `java.util.concurrent.ScheduledThreadPoolExecutor` 类。 例如: ``` import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class Main { public static void main(String[] args) { ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); executor.scheduleAtFixedRate(new Runnable() { @Override public void run() { System.out.println("定时任务开始执行"); } }, 0, 1, TimeUnit.SECONDS); // 这里表示每隔 1 秒执行一次 } } ``` 3. 使用 `java.util.Date` 类和 `java.util.concurrent.ScheduledThreadPoolExecutor` 类。 例如: ``` import java.util.Date; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; public class Main { public static void main(String[] args) { ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1); long delay = 1000; // 这里表示延迟 1 秒执行 long period = 1000; // 这里表示每隔 1 秒执行一次 executor.scheduleAtFixedRate(new Runnable() { @Override public void run() { System.out.println("定时任务开始执行"); } }, new Date(System.currentTimeMillis() + delay), period, TimeUnit.MILLISEC ### 回答2: Java中可触发定时任务的方式有多种,其中常用的一种是使用Java的Timer类和TimerTask类结合起来实现。 首先需要创建一个继承自TimerTask类的任务类,该类重写了run方法,在run方法中编写想要定时执行的任务逻辑。例如: ```java import java.util.TimerTask; public class MyTask extends TimerTask { @Override public void run() { // 在这里编写任务逻辑 System.out.println("定时任务触发了!"); } } ``` 接下来,在主程序中创建一个Timer对象,并指定定时任务触发间隔和首次触发的延迟时间。例如: ```java import java.util.Timer; public class Main { public static void main(String[] args) { Timer timer = new Timer(); long delay = 0; // 首次触发的延迟时间 long period = 1000; // 触发间隔,单位是毫秒 // 创建定时任务对象 MyTask task = new MyTask(); // 使用timer.schedule方法设置定时任务 timer.schedule(task, delay, period); } } ``` 以上代码中,定时任务将会每隔1000毫秒触发一次,并且首次触发的延迟时间为0毫秒。 当程序运行后,定时任务将会每隔1秒输出一次"定时任务触发了!"的提示信息。 这就是使用Java实现可触发定时任务的基本步骤,通过修改Timer对象的schedule方法的参数,可以灵活地设置触发间隔和首次触发的延迟时间,以满足不同的定时任务需求。 ### 回答3: Java中可以使用Java.util.Timer类来执行定时任务。下面是一个简单的示例代码: ```java import java.util.Timer; import java.util.TimerTask; public class ScheduledTask { public static void main(String[] args) { Timer timer = new Timer(); // 创建一个定时任务 TimerTask task = new TimerTask() { @Override public void run() { System.out.println("定时任务执行"); // 任务逻辑代码 } }; // 指定任务在1000毫秒后开始执行,每隔2000毫秒执行一次 timer.schedule(task, 1000, 2000); } } ``` 上述代码中,我们使用`java.util.Timer`类来执行定时任务。在`main`方法中,我们首先创建一个`Timer`对象。然后,我们创建一个`TimerTask`对象,重写其中的`run`方法,并在该方法中编写我们的定时任务逻辑代码。最后,通过`timer.schedule(task, delay, period)`方法指定任务的延迟执行时间和重复执行间隔时间。 在上述示例中,我们的定时任务会在1000毫秒后开始执行,并且每隔2000毫秒执行一次。在`run`方法中,我们打印出"定时任务执行"的消息,你可以在该方法中编写你的实际任务逻辑代码。 值得注意的是,当任务不能及时执行或者执行时间过长时,可能会影响到任务的准时性。因此,在编写定时任务时,要谨慎考虑任务的执行时间和系统负载情况,以确保任务能够准时执行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值