JAVA ScheduledExecutorService - 每天运行一次重复某个Job

时间:2014-04-04 14:24:49

标签: java repeat scheduledexecutorservice

我正在编写J2SE app,目的是每天向远程服务器发送一定数量的请求。每天发送的请求数量有限,甚至每小时 - 每天100K请求和&每小时10K => aprox的。每2.8秒1次。

我写了一个示例程序,它每15秒打印一次 - 重复我使用ScheduledExecutorService& ScheduledFuture我指定了我的runnable,没有启动延迟,重复延迟= 15000,时间单位= MILLISECONDS。

在我的测试runnable中,我试图模拟在循环中做一些事情(只是简单的println()和在这些迭代之间的睡眠(2800)) - 因为我在计划任务之间执行下一个15秒,我才意识到我需要6次打印=> 6 * 2800 = 14000,最好可达15000.但正如我在睡觉时看到的,下一次执行应该在15000ms之后发生的整个任务实际发生在:14000ms + 15000ms之后。我猜这个睡眠(2800)对它有一些影响。

正如我所说的,我需要重复某些每天发送一次的请求,在发送之间有一段时间延迟 - 但是在接下来的24小时之后不要再执行这项任务。我怎么能实现这个目标呢?

使用:ScheduledFuture,ScheduledExecutorService,ThreadFactory

如果有人可以提供帮助,那么我的代码是https://db.tt/vznt4PWG,它是一个Eclipse项目。

1 个答案:

答案 0 :(得分:1)

解决方案:

ScheduledExecutorService scheduledExecutor = Executors.newSingleThreadScheduledExecutor(new     ThreadFactory() {

        @Override
        public Thread newThread(Runnable runnable) {
            return new Thread(runnable, "MY_REPEATING_JOB");
        }
});
Runnable jobToExecute = new MyJob();
scheduledExecutor.scheduleWithFixedDelay(jobToExecute, 0, 1, TimeUnit.NANOSECONDS);

我控制MyJob run() Runnable方法中的sleep()等待 - 基本上当某些操作结束时我会计算差异时间直到我想要等待,而我{{1}这个时候。

任务正在重复执行,直到我在执行程序的代码shutdown()中执行某个操作。