Java计划任务在后台以一定间隔重复运行

时间:2018-10-11 05:01:00

标签: java multithreading

我希望我的主程序在updateRecord方法在后台运行时继续执行。 updateRecord方法会以一定的间隔不断更新记录的到期时间。

这是我的updateRecord方法。

    public void updateRecord(LeaderRecord leader) {
      LeaderRecord record = data.get(leader.getType());
      synchronized (this) {
        if (leader.getId().equals(record.getId()) || leader.getVersion() == record.getVersion()) {
          Runnable runnable = () -> {
            calendar.add(Calendar.SECOND, timeLimit);
            leader.setExpiryTime(new Timestamp(calendar.getTime().getTime()));
            data.put(leader.getType(), leader);
            System.out.println(record.getExpiryTime());
          };
          ScheduledExecutorService service = Executors.newScheduledThreadPool(1);
          service.scheduleAtFixedRate(runnable, 0, timeLimit, TimeUnit.SECONDS);
        }
      }
    }

此代码在打印一次时间后停止运行。 我应该怎么做以使其在主应用程序执行时仍在后台运行? 预先谢谢你!

2 个答案:

答案 0 :(得分:1)

使用<input [(ngModel)]="selectedStock.ItemCode" id="ItemCode" placeholder="name" class="form-control" [attr.disabled]="!(selectedStock.ItemCode)" name="ItemCode" #ItemCode="ngModel" ngModel> 以设定的时间间隔运行任务。

ErrorDocument <3-digit-code> <action>

这将使程序永远运行直到您停止它。使用

ErrorDocument 404 /404.php

停止java.util.Timer

Timer t = new Timer();
t.schedule(new TimerTask() { //(TimerTask task, long delay, long period)
    @Override
    public void run() {
        updateRecord(leader);
    }
}, 0, 3600000); //delay = 0, interval in milliseconds

终止应用程序。

答案 1 :(得分:1)

考虑使用计时器。它们应该是您想要的。它与您正在执行的操作相似,但是具有您要查找的所有功能。

t.cancel();
t.purge();

我希望这会有所帮助。