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

标签 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);
    }
}

我正在尝试安排一个计时器,如果有一个现有任务安排给它,那么我将取消该计时器,创建一个新计时器并安排一个新任务。

我收到错误消息,因为 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/

相关文章:

java - 如果某些字段无法转换为对象,则 ObjectMapper 默认值

java - 如何根据用户的选择动态生成SQL查询?

c# - 如何将多个线程同步到一个公共(public)点

java - JMS客户端收不到消息

java - 如何为 servlet 请求提供 X 秒内返回的语义?

java - 在不循环的情况下随机获取 HashMap 或 HashSet 中的元素

java - 验证不同的验证组 JSF 2.0

multithreading - 读取对象时是否需要锁定对象?

python - 如何在多线程任务/时间图中可视化线程?

java - 设置最大消费者数量 jms solac