这是我的问题,我正在使用 JMS 向队列发送一些消息。该程序的编写方式是在上一条消息发送后的 30 秒内将有一条消息发送到队列。如果在 30 秒内没有消息发送,那么该消息就是最后一条消息,我应该开始使用队列中的消息。
我最初的想法是创建一个带有任务的计时器(这里从队列接收消息),当创建新消息时,调用该方法,任务等待 30 秒。如果再次调用该方法,则表示已收到另一条消息,因此必须重新安排任务。
这是我写的代码:
public void startTimer() {
Timer t = new Timer();
try {
t.schedule(task, timeDelay);
} catch (Exception e) {
t.cancel();
t = new Timer();
t.schedule(task, timeDelay);
}
}
我正在尝试安排一个计时器,如果有一个现有任务安排给它,那么我将取消该计时器,创建一个新计时器并安排一个新任务。
我收到错误消息,因为 Task already scheduled or cancelled
。
欢迎提出任何改进意见或建议或解决方案。
最佳答案
您不能在一个或多个 Timer
中使用相同的 TimerTask
。
您需要创建要执行的 TimerTask
的新实例:
t.cancel();
t = new Timer();
TimerTask newTask = new MyTimerTask(); // new instance
t.schedule(newTask, timeDelay);
关于java - 如何使用计时器重新安排任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20242540/