ScheduledExecutorService

ScheduledExecutorService

我想在每天的7.11pm的特定时间运行任务。
我已经尝试了以下代码,但无法正常工作。

import java.util.Calendar;
import java.util.Date;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class Task3 {
    public static void main(String[] args) {
        Runnable runnable = new Runnable() {
            public void run() {
                System.out.println(new Date());
                System.out.println("Hello !!");
            }
        };

        Calendar calendar = Calendar.getInstance();
        long now = calendar.getTimeInMillis();
        calendar.set(Calendar.HOUR, 18);
        calendar.set(Calendar.MINUTE, 11);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
        service.scheduleAtFixedRate(runnable, calendar.getTimeInMillis(), 5, TimeUnit.SECONDS);
    }
}


在上面的代码中,我尝试从每天晚上7:11开始运行调度任务,间隔为5秒。但这并不像我预期的那样。另外,如果我想对另一个条件执行相同的操作,即该任务只能在特定的日期执行,则可以说每个星期二和星期三。

我在计算方法的initialDelay参数时是否犯了某种错误?

最佳答案

最好是ScheduledExecutorService。
但是也许也可以使用计时器。为了摆动另一个计时器。

这是一个示例(可以通过取消/清除来停止timer和timerTask)。

 import java.util.Calendar;
 import java.util.Date;
 import java.util.Timer;
 import java.util.TimerTask;

 public class TimeScheduleTest {
  Timer timer = new Timer();
  public static void main(String[] args) {
   new TimeScheduleTest().startApp();
  }

 private void startApp() {
  Calendar calendar = Calendar.getInstance();
  calendar.set(Calendar.DAY_OF_WEEK,Calendar.TUESDAY);
  calendar.set(Calendar.HOUR_OF_DAY, 7);
  calendar.set(Calendar.MINUTE, 11);
  calendar.set(Calendar.SECOND, 0);
  calendar.set(Calendar.MILLISECOND, 0);
  timer.scheduleAtFixedRate(new StartTimer(), calendar.getTime(), 5000);
 }

 class StartTimer extends TimerTask {
  public void run() {
   System.out.println(new Date());
   System.out.println("Hello !!");
  }
 }
}

关于java - 如何为ScheduledExecutorService#scheduleAtFixedRate计算initialDelay,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41428252/

10-09 05:15