java - 在java中安排任务

标签 java scheduled-tasks timertask

在我的 java web 应用程序中,我想安排一个任务。

我在网上搜索了很多,但找不到适合我的情况的调度程序。在应用程序中,我有不同类型的用户。对于特定的用户类型,我想安排一个任务。

当用户采取关键操作时:

  • 我想在 15 分钟后向该特定用户发送电子邮件
  • 我想在 30 分钟后发送另一封电子邮件
  • 我想发送另一封电子邮件并关闭调度程序。

我知道用户何时采取关键操作以及如何发送电子邮件,但我对日程安排没有太多经验。

谁能帮我处理这个案子?

最佳答案

为什么不使用 ScheduledExecutor? http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledExecutorService.html

它有一个方法 schedule 允许你安排你想要的任何任务(你传递一个可运行的)。所以基本上,对于每个用户,您安排一个发送电子邮件的任务并安排另一个任务。

import static java.util.concurrent.TimeUnit.*;

class Task implements Runnable {
   private final User user;
   private final int rep;
   private final ScheduledExecutorService scheduler;

   public Task(User user, int rep, ScheduledExecutorService scheduler) {
       this.user = user;
       this.rep = rep;
       this.scheduler = scheduler;
   }

   public void run() {
       // send an e-mail to user
       if (rep > 0)
           scheduler.schedule(new Task(user, rep - 1, scheduler), 15, MINUTES);
   }
}

class Example {
    private final ScheduledExecutorService scheduler =
        Executors.newScheduledThreadPool(1);

    public void sendEmails() {
        // foreach user
        scheduler.submit(new Task(user, 3, scheduler));
    }
}

您可能希望使用具有多个线程的预定线程池。

关于java - 在java中安排任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22320920/

相关文章:

python-3.x - 在 Windows 10 中调度 Python 脚本可执行文件

java - 如何抑制主线程,直到主线程调用的 TimerTask 线程完成?

java - Java 和 Web 套接字中的 TimerTask

java - Apache html 响应返回乱码

linux - 当 tid 是内核线程时,sched_setaffinity () 调用出错

java - 是否有一种实用方法可以通过给定的字符串分隔列表?

windows - 注销和登录后任务计划程序无法显示应用程序的 GUI(无论用户是否登录都运行)

java - 在 Java/Linux 应用程序中启动数千个计时器

java - main 方法的正确语法

java - 如何在maven项目中忽略从部署到karaf的一个包