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));
}
}
import java.util.Timer;
import java.util.TimerTask;
/**
* Simple demo that uses java.util.Timer to schedule a task
* to execute once 5 seconds have passed.
*/
public class Reminder {
Timer timer;
public Reminder(int seconds) {
timer = new Timer();
timer.schedule(new RemindTask(), seconds*1000);
}
class RemindTask extends TimerTask {
public void run() {
System.out.format("Time's up!%n");
timer.cancel(); //Terminate the timer thread
}
}
public static void main(String args[]) {
new Reminder(5);
System.out.format("Task scheduled.%n");
}
}
5条答案
按热度按时间soat7uwm1#
您也可以使用JobRunr,一个易于使用的和open-source Java Scheduler。
要使用JobRunr将作业安排在15分钟后,您将使用以下代码:
然后,您可以对其他2封电子邮件重复这些步骤。如果您想取消发送这些电子邮件(例如,当用户采取行动时),您可以通过作业ID轻松地再次删除这些作业(当然,只有当作业尚未执行时)
JobRunr还提供了自动重试功能(例如,邮件服务器或sendgrid停机)和嵌入式 Jmeter 板,允许您跟踪您的作业执行情况。
zy1mlcev2#
我建议您看一看quartz调度API http://quartz-scheduler.org/
到目前为止,我已经在几个项目中使用过它,在中设置和配置新作业真的很容易。它支持基于Cron的触发器或SimpleTrigger,因此您可以在Java代码中计算计划事件的时间,也可以简单地向其传递Cron字符串。
另一个优点是,它真的很容易配置Spring。
busg9geu3#
为什么不使用ScheduledExecutor?http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledExecutorService.html
它有一个方法
schedule
,允许你安排你想要的任何任务(你传递一个runnable),所以基本上,你为每个用户安排一个发送电子邮件的任务和另一个任务。您可能希望使用具有多个线程的计划线程池。
idv4meu84#
使用Quartz Scheduler计划任务
所需步骤-
1)石英作业
2)创建触发器- CronTrigger -每30秒运行一次
3)创建计划程序
ukdjmx9f5#
以下是有关如何使用Java定时器的教程:http://enos.itcollege.ee/~jpoial/docs/tutorial/essential/threads/timer.html
您可以按顺序创建多个计时器任务以实现您的目标。
示例代码引用: