正如标题所说,我正在尝试使用排定注释的fixedRate参数,以便每秒调用一个函数。下面是我正在使用的代码:
//execute once every second
@Scheduled(fixedRate = 1000)
private void pullLiveDataFromExternalServer() throws InterruptedException {
System.err.println("START THREAD " + Thread.currentThread().getId());
Thread.sleep(5500L);
System.err.println("END THREAD " + Thread.currentThread().getId());
}
按照我的理解,在打印第一个“结束线程”之前,函数应该打印五次“开始线程”。
问题是函数先打印“开始线程”然后等待5.5秒,打印“结束线程”,然后走“开始线程”,以此类推……看起来调度程序在启动新的执行之前等待前一个执行完成,但fixedRate属性不应该是这种情况。
我仔细阅读了一下,发现@Scheduled annotation的默认调度程序只有一个线程,所以我创建了一个配置,将池大小更改为8。
@Component
public class SchedulingConfigurerConfiguration implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
taskScheduler.setPoolSize(8);
taskScheduler.initialize();
taskRegistrar.setTaskScheduler(taskScheduler);
}
}
但是fixedRate属性的行为没有改变,调度程序在启动新的执行之前仍在等待前一次执行结束。为什么会出现这种情况?
在启动新的执行之前,排定程序会等待前一个执行完成
这是正确的,这是预期的行为。每个计划任务,无论fixedrate
或fixeddelay
,都永远不会并行运行。即使调用的时间比配置的fixedrate
长,也是如此。
最终,固定速率调度会导致调用scheduledexecutorService.scheduleatfixedrate
。其javadoc声明如下:
如果同一调度任务的多个调用可以并行运行,那么问题中的示例将耗尽所有可用线程。每1000ms就会使用一个新线程,而每5500ms才会有一个线程再次可用。
我正在开发一个应用程序,该应用程序应该每隔X秒从网络下载一个文件,以检查是否有任何更改。我使用一个服务来完成这项工作,但它的执行并不随延迟时间率而固定,这是我的服务代码: 输出不是固定的,它应该每10秒运行一次,同时以随机方式运行服务
我有一个部分,其中左div是固定的,右div是可滚动的,但右div内容滚动,甚至在滚动顶部到达该部分之前。我想要右div滚动只有当它到达div的顶部或底部时(当从底部向上滚动时),但它滚动任何它想要的(不一致-当我快速滚动时,它开始滚动在节的中间,等等)。 当我快速向上或向下滚动时,它甚至会跳过这一节,但我希望它永远不会被跳过。 尝试快速和慢速滚动。卷轴可以随时工作: JSFiddle示例 代码:
我不能玩春云之门的限速器。我在这里配置网关: 我使用JMeter调用API循环1000次,但网关没有响应429响应中的请求太多。我哪里错了?
将Blockly放入网页的最简单方法是将其注入空的“div”标签。 注入 首先,包括核心Blockly脚本和核心模块。请注意,路径可能会有所不同,具体取决于您的网页与Blockly文件相关的位置: <script src="blockly_compressed.js"></script> <script src="blocks_compressed.js"></script> 然后包含用户语言的消
如果我使用的术语不正确,我必须首先道歉。我只使用Groovy/Java来完成自动化任务(Gradle),而且我没有多年交付生产级软件的经验。 因此,我面临的挑战如下:我有一个规范,它试图测试返回字符串是否符合预期(几乎与此相同)。 然而,不同之处在于,我的方法约束返回一个主体对象,而我真正想要存根的对象是toString()。我认为我在上面做得正确,但它没有给出我期望的结果。 这是我的帮手班。 如
我正在开发一个应用程序,它需要每x分钟上线一次,检查一些新数据。为了防止大量的网络和数据使用,任务应该以固定的速率运行,但是这种解决方案的最佳方法是什么?< code >处理程序或< code >计时器对象?