在我的 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/