如何以固定速率安排持续时间长于速率的任务?

2023-12-06

我正在尝试安排一个每秒运行大约 2.25 秒的任务。因此我知道 3 个线程应该足以处理负载。我的代码如下所示:

private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(4);
scheduler.scheduleAtFixedRate(new Streamer(), 0, 1000, TimeUnit.MILLISECONDS);

有趣的是,它的行为类似于 ScheduledAtFixedDelay,延迟为 0(线程每约 2.25 秒完成一次)。

我知道,如果线程运行延迟,scheduleAtFixedRate 可能会延迟。但是给执行器更大的线程池不应该解决这个问题吗?

我可以通过编写 3 个执行程序每 3 秒启动一次来轻松规避这个问题,但这会给管理带来不必要的困难。

有没有更简单的解决方案来解决这个问题?


ScheduledExecutor 自动防止任务执行重叠。因此,您的后续执行将被延迟,直到上一个执行完成后。

Docs:

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

所以你需要安排3具有 1) InitDelay 0 秒、2) InitDelay 1 秒、3) InitDelay 2 秒的任务,每个任务的周期为 3 秒。

private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(4);
final Streamer sharedStreamer = new Streamer();
scheduler.scheduleAtFixedRate(sharedStreamer, 0, 3, TimeUnit.SECONDS);
scheduler.scheduleAtFixedRate(sharedStreamer, 1, 3, TimeUnit.SECONDS);
scheduler.scheduleAtFixedRate(sharedStreamer, 2, 3, TimeUnit.SECONDS);

请注意,如果存在大部分同步代码,则使用共享资源执行可能会导致执行时间延长。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何以固定速率安排持续时间长于速率的任务? 的相关文章

随机推荐

  • JSF 2.0 中的 WEB.XML 错误页面

    我正在使用 JSF2 和 Glassfish 3 0 我有一个非常简单的应用程序 我正在尝试设置一些默认错误页面404 and 500 error 这是WEB XML部分
  • 插入表单时如何删除 Word 标记垃圾?

    我正在用 PHP 构建一个 CMS 我担心的一个问题是用户必须从现有的 Word 和 Excel 但不用担心 文档中填写数据 现在 我已经看到了当他们不小心从 Word 复制并粘贴到文本区域时会发生什么 数据库充满了垃圾标记 现在 我当然可
  • Xamarin 链接器:未找到 Cirrious.CrossCore.IoC.MvxPropertyInjector 类型的默认构造函数

    使用 HotTuna 包中的 FirstView 的骨架项目 并将构建链接器行为设置为 链接所有程序集 我收到以下错误 System MissingMethodException 找不到 Cirrious CrossCore IoC Mvx
  • 如何设置 application/json 以外的 Content-Type

    我正在尝试通过 AFNetworking2 0 向我的服务器发送 REST API 我们的服务器只接受Content Type as application vnd mycom mycom csc json当我发送请求时 它确实是json格
  • 启动本地azure项目时调试器无法连接

    好的 首先 这就是我所做的 安装 AZURE 工具 Reboot 启动 Visual Studio 新的 Azure 项目 添加 Web 角色 asp net MVC 4 beta Web 角色 按 F5 调试 它启动存储模拟器和计算模拟器
  • 如何设置表适配器的连接字符串(动态设置的连接字符串)

    我刚刚从另一位不再在公司工作的开发人员那里继承了 数据库专家 的角色 所以如果我听起来特别菜鸟 请原谅我 该应用程序是一个 VB NET 4 应用程序 我们的表适配器的数据库连接字符串是 my settings My Settings DB
  • 在Unity3d C#中访问动态添加的组件

    添加后Component to a GameObject通过GameObject AddComponent方法 我怎样才能访问这个Component来自另一个脚本 这是 myScript 代码 未附加到游戏对象 using UnityEng
  • 如何在 Python 中将一个列表拆分为两个唯一的列表?

    嗨 我有一个清单如下 listt a b c d e f g h i j k l m n o 15名成员 我想把它变成 3 个列表 我使用了这段代码 它有效 但我想要唯一的列表 这给了我 3 个具有共同成员的列表 import random
  • Octave - 如何在 Windows 上安装软件包

    Question 由于问题在修复了 Octave urlread 导致无法使用给定 CA 证书对对等证书进行身份验证的问题 我无法在 Windows 上安装 Octave 软件包 请建议其他安装方式 我特别想经历梯度 梯度图和切平面这需要符
  • ASP.NET 和 WordPress 之间共享身份验证

    我现在的情况是需要在 ASP NET 网站和 WordPress 之间自动验证用户 这个想法是 一旦您登录到 ASP NET 网站 并且浏览 WP 页面 您就会自动登录 反之亦然 在 ASP NET 中 我可以针对 WP 数据库对用户进行身
  • 使用sql/plsql,如何找出文本使用的字符集?

    我有一个 Oracle 数据库 它存储来自世界各地 不同语言的文档内容 文档存储在一个带有 BLOB 列的表中 该列存储文档的内容 我想通过 Oracle 过程找出每个文档的字符集是什么 我不想使用 CSSCAN 实用程序 因为您似乎必须在
  • 所有 JSON 对象也是有效的 JavaScript 对象吗?

    The JSON标准以一种方式定义对象 并且ECMAScript JavaScript 标准在另一个标准中定义了它 人们常说 JSON 对象是 JavaScript 对象的子集 这是真的吗 每个 JSON 对象也是一个有效的 JavaScr
  • 无法使用 ApachePOI 打开 excel - 出现异常

    在尝试使用 Apache POI 打开 excel 时 我得到了 org apache poi openxml4j exceptions InvalidOperationException Can t open the specified
  • Java 重写来自另一个类的方法而不继承

    我在这里发现了类似的问题 Java 中无需子类化即可重写方法 但我的有点不同 我有两个类 一个基于 GUI 另一个只是修改第一类中元素的方法 如果它只是编辑基本功能 我不会遇到任何问题 但现在我想从第二类重写第一类方法中的 jbutton
  • spring - hibernate 从类路径资源加载 *.hbm.xml

    我在 src main resources maven 文件夹中的类路径资源中有一些 hbm xml 文件 我使用 spring 的 LocalSessionFactoryBean 通过以下 bean 配置加载这些文件
  • 对齐饼图图例中的文本 - 如何右对齐图例内的内容

    截至目前我的图例显示如下测试1 5 测试2测试2 10 测试2测试2测试3 85 我试图像这样显示 带有空格并右对齐 测试1 5 测试2测试2测试2 10 测试3测试3测试3 85 任何建议表示赞赏 您可以使用所示的方法here创建一个包含
  • Webfont +悬停颜色:部分文本不改变颜色

    我见过几次这种情况 只在 Webkit 上 场景是您有一些带有悬停颜色的文本 并且它使用 webfont 自定义字体 当您悬停时 最右边字母的一部分没有获得悬停颜色 要明白我的意思 请在 Chrome 或 Safari 中查看此小提琴 并在
  • Python中通过数组索引调用函数

    我在 Python out1 out2 out3 等中有一堆函数 想根据我传入的整数来调用它们 def arryofPointersToFns value call outn where n value 是否有捷径可寻 tl dr 写一个o
  • PHP 检测低于版本 10 的 Internet Explorer

    有人可以帮我做这个吗 因为我只有mac 无法测试IE 如果浏览器是 Internet Explorer 并且版本低于 10 那么运行事件的好方法是什么 比如说它是 IE 7 它会显示错误 或者如果它是 IE 9 9 它会显示错误 但是如果它
  • 如何以固定速率安排持续时间长于速率的任务?

    我正在尝试安排一个每秒运行大约 2 25 秒的任务 因此我知道 3 个线程应该足以处理负载 我的代码如下所示 private final ScheduledExecutorService scheduler Executors newSch