我正计划在每个星期四晚上7点之后安排一份工作。但到目前为止,使用下面的代码,我可以让它在星期四运行,但不能在下午7点之后运行。
我正在使用ScheduledExecutorsService
。我有什么方法可以让它在星期四晚上7点之后运行吗?
private static final ScheduledExecutorService executorService = Executors.newScheduledThreadPool(2);
final ArrayList<Callable<Void>> tasks = Lists.newArrayList(new TestBImpl(), new TestAImpl());
Calendar with = Calendar.getInstance();
Map<Integer, Integer> dayToDelay = new HashMap<Integer, Integer>();
dayToDelay.put(Calendar.FRIDAY, 0);
dayToDelay.put(Calendar.SATURDAY, 6);
dayToDelay.put(Calendar.SUNDAY, 5);
dayToDelay.put(Calendar.MONDAY, 4);
dayToDelay.put(Calendar.TUESDAY, 3);
dayToDelay.put(Calendar.WEDNESDAY, 2);
dayToDelay.put(Calendar.THURSDAY, 1);
int dayOfWeek = with.get(Calendar.DAY_OF_WEEK);
int delayInDays = dayToDelay.get(dayOfWeek);
scheduler.scheduleAtFixedRate(new Runnable() {
public void run() {
try {
executorService.invokeAll(tasks);
} catch (Exception ex) {
ex.printStackTrace(); // or loggger would be better
}
}
}, 0, delayInDays, TimeUnit.DAYS);
任何建议都会有很大帮助。我需要使用Multithreaded方式执行我的任务。在我的tasks
中,我现在将有两个以上的类,我只有两个类,我正在并行执行它。
答案 0 :(得分:0)
我会让调度程序在每个小时运行任务,任务将使用日历来确定日期和小时,并且只有在周四晚上7点才执行
scheduler.scheduleAtFixedRate(new Runnable() {
public void run() {
Calendar c = Calendar.getInstance();
if (c.get(Calendar.HOUR_OF_DAY) == 19 && c.get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY) {
try {
executorService.invokeAll(tasks);
} catch (Exception ex) {
ex.printStackTrace(); // or loggger would be better
}
}
}
}, 0, 1, TimeUnit.HOURS);