java计划在pseudo';固定的';速率(例如钟形曲线分布)

java计划在pseudo';固定的';速率(例如钟形曲线分布),java,scheduled-tasks,threadpool,callable,Java,Scheduled Tasks,Threadpool,Callable,目前我有一个ScheduledThreadPoolExecutor,它可以以固定速率执行可调用的 scheduledThreadPoolExecutor.scheduleAtFixedRate(callable, delay, waitNano, TimeUnit.NANOSECONDS); 我的团队想在waitNano中添加一些随机性。目前是1000。但我们希望第二个等待时间是900、1100、800、1200,例如。平均等待时间仍然是1000,但等待秒是随机分布的(例如,像钟形曲线) 我想

目前我有一个ScheduledThreadPoolExecutor,它可以以固定速率执行可调用的

scheduledThreadPoolExecutor.scheduleAtFixedRate(callable, delay, waitNano, TimeUnit.NANOSECONDS);
我的团队想在waitNano中添加一些随机性。目前是1000。但我们希望第二个等待时间是900、1100、800、1200,例如。平均等待时间仍然是1000,但等待秒是随机分布的(例如,像钟形曲线)

我想知道java中是否已经有了这个功能? 如果我必须编写自己的“调度程序”,它具有这种随机等待行为,你们有什么建议

非常感谢


Erben

以固定的计划(例如10分钟)调用另一个
Runnable
,并让它随机配置random scheduler的下一次执行,但仍然管理随机性

使用

例如:第一列显示固定计划程序的执行情况,该计划程序决定何时执行托管随机计划程序

0    1
5    7
10   11
15   18

抱歉,它不是内置在标准库中的。有可能某个地方有第三方图书馆可以为你做这件事,但我不知道。(你可能想看看)虽然语义并不完全相同,我们希望间隔为500纳秒,但抖动为+/-350。通过这种方法,我们每150纳秒就有一个固定的调度,在这个调度中,它将从[0,700]纳秒延迟调度另一个随机任务,以确保均值和方差相同。[500-350500+350]=[150150+700]但是通过这样做,第二个计划可能发生在第一个计划之前。例如,第一个拾取600,第二个拾取200,这将在600之前的150+200=350纳秒时发生。