如何以每秒几个固定的速率准确地安排任务

5 java multithreading

我目前正在使用

 ScheduledFuture<?> schedulerFuture = scheduler.scheduleAtFixedRate(taskMaker, 0 , period, TimeUnit.MICROSECONDS);                
 ScheduledFuture<?> timerFuture = timer.schedule(timeAnalyser, time, TimeUnit.MICROSECONDS);
Run Code Online (Sandbox Code Playgroud)

每秒执行许多任务,在几个线程中也是异步的.问题是,我得到了不准确的信息.例如,当我想在一秒内在第一个线程中执行3个任务,在第二个线程中执行7个任务,在第三个线程中执行5个,有时我会得到4,7,6或3,6,6.这不是处理器在使用更大的数字时无法做到,但我想要每秒执行的任务越多,不准确性就越大.也许是因为timer(停止taskMaker)是在与...完全相同的时间开始的taskMaker

任何改变建议?无论如何,使用SchedulesExecutorService如此高频率执行任务是正确的方法吗?

lan*_*ava 2

来自javadoc

如果此任务的任何执行时间超过其周期,则后续执行可能会延迟开始,但不会同时执行。

我认为您可能想自己管理计时,schedule而不是使用scheduleAtFixedRate(例如计算一个任务执行后的延迟并在该确切的延迟期间安排下一个任务)。

另请注意,除非您执行大量 IO,否则应将池大小保持为服务器上处理器的数量(例如Executors.newScheduledThreadPool(numberOfCpus)