我正在编写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项目。
答案 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()
中执行某个操作。