如何使用计时器重新安排任务?

New*_*ser 5 java multithreading jms

这是我的问题,我正在使用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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试安排一个计时器,如果有一个预定的任务,那么我要取消该计时器,创建一个新的计时器并安排一个新任务。

我收到错误消息为Task already scheduled or cancelled

任何改进的想法或建议或解决方案都是最欢迎的。

Jea*_*art 5

您不能一次使用TimerTask多个Timer

您需要创建一个TimerTask要执行的新实例:

t.cancel();
t = new Timer();
TimerTask newTask = new MyTimerTask();  // new instance
t.schedule(newTask, timeDelay);
Run Code Online (Sandbox Code Playgroud)