如何使用ScheduledExecutorsService在星期四下午7点之后运行特定任务?

时间:2014-04-14 03:44:13

标签: java multithreading executorservice scheduledexecutorservice

我正计划在每个星期四晚上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中,我现在将有两个以上的类,我只有两个类,我正在并行执行它。

1 个答案:

答案 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);