0

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

我只写了一个示例程序,它每 15 秒打印一次——重复时我使用了 ScheduledExecutorService 和 ScheduledFuture,我指定了我的可运行,没有启动延迟,并且重复延迟 = 15000,时间单位 = MILLISECONDS。

在我的可运行测试中,我试图模拟在循环中做一些事情(只是简单的 println() 并在这些迭代之间使用 sleep(2800) ) - 因为我处于预定任务中,下一次执行之间有 15 秒,我刚刚意识到我需要 6 次print => 6 * 2800 = 14000,最高可达15000。但是正如我在睡觉时看到的那样,下一次执行应该在15000ms之后发生的整个任务实际上发生在:14000ms + 15000ms之后。我猜这个 sleep(2800) 对它有一些影响。

正如我所说,我需要每天重复发送一次某些请求,发送之间有一些时间延迟 - 但在接下来的 24 小时后不要触及此任务的全面执行。我怎样才能做到这一点?

使用: ScheduledFuture , ScheduledExecutorService , ThreadFactory

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

4

1 回答 1

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

MyJobrun()方法中控制内部等待Runnable- 基本上当一些操作结束时,我计算差异时间直到我想等待,我sleep()用这个时间做。

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

于 2015-01-09T09:09:53.853 回答