ExecutorService 按顺序执行任务,但从池中获取线程

2023-12-20

我正在尝试构建一个实现ExecutorService,我们称之为SequentialPooledExecutor,具有以下性质。

  1. 的所有实例SequentialPooledExecutor共享同一个线程池

  2. 调用同一个实例SequentialPooledExecutor是按顺序执行的。

换句话说,实例会等待当前正在执行的任务终止,然后再开始处理队列中的下一个任务。

我目前正在实施SequentialPooledExecutor我自己,但我想知道我是否在重新发明轮子。我研究了不同的实现ExecutorService,例如那些由Executors类,但我没有找到符合我要求的类。

您知道我是否缺少现有的实现,或者我应该继续自己实现接口吗?

EDIT:

我觉得我的要求不是很清楚,让我们看看我是否可以用其他语言来解释它。

假设我有一系列会话,比如说 1000 个(我之前调用执行器实例的东西)。我可以将任务提交到会话,并且我希望保证提交到同一会话的所有任务都按顺序执行。但是,属于不同会话的任务不应相互依赖。

我想定义一个ExecutorService它执行这些任务,但使用有限数量的线程(假设为 200 个),但确保在同一会话中的前一个任务完成之前不会启动任务。

我不知道是否有任何现有的东西已经做到了这一点,或者我是否应该实施这样的ExecutorService myself.


如果您有数千个必须按顺序处理的键,但您没有数千个核心,则可以使用散列策略来分配工作,如下所示

ExecutorService[] es = // many single threaded executors

public <T> Future<T> submit(String key, Callable<T> calls) {
    int h = Math.abs(key.hashCode() % es.length);
    return es[h].submit(calls);
}

一般来说,你只需要 2 * N 个线程来保持 N 个核心忙碌,如果你的任务受 CPU 限制,更多只会增加开销。

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

ExecutorService 按顺序执行任务,但从池中获取线程 的相关文章

  • 在 jTextfield 中禁用“粘贴”

    我有一个用 Swing awt 编写的应用程序 我想阻止用户将值粘贴到文本字段中 有没有办法在不使用动作监听器的情况下做到这一点 您可以使用 null 参数调用 setTransferHandler 如下所示 textComponent s
  • 重写 getPreferredSize() 会破坏 LSP

    我总是在这个压倒一切的网站上看到建议getPreferredSize 而不是使用setPreferredSize 例如 如前面的线程所示 对于固定大小的组件 使用重写 getPreferredSize 而不是使用 setPreferredS
  • 迭代函数可以调用自身吗?

    当观看下面的 MIT 6 001 课程视频时 讲师在 28 00 将此算法标记为迭代 但是 在 30 27 他说这个算法和实际的 递归 算法都是递归的 该函数正在使用基本情况调用自身 那么这次迭代情况如何 private int itera
  • 本地开发的 Azure Functions 扩展包版本问题

    我有一个带有队列触发器的 Java 11 Azure 函数 该函数在部署到 Azure 时按预期工作 并正确从定义的服务总线主题中提取消息 但是 运行相同的功能locally除非我回滚版本 否则不起作用Azure Functions 绑定扩
  • 以有效的方式从 Map 中删除多个键?

    我有一个Map
  • JavaFX使节点覆盖父节点边框颜色

    我有一个如下所示的节点 仅使用 css 我希望标签覆盖其父边框颜色 因此标签下方的边框颜色部分变得不可见 我用来制作这个边框的CSS代码 fx border color black fx border width 3 fx border r
  • 插入时的 iBatis 判别器

    我有一个抽象类Example以及与之相伴的具体子类 我使用鉴别器来提取数据out数据库的 像这样
  • 正确签名的 JNLP 应用程序无法在 Java 7 中运行

    我有一个 JNLP 应用程序 由于证书过期需要更新 我有一个经过 CA 验证的新证书 我已将新证书导入到我的密钥库中 我已导入完整的证书链 我的构建文件对构建中的 jar 进行签名和时间戳
  • 在 Java 中创建 XML 文件的最佳方法是什么?

    我们目前使用 dom4j 来创建 XML 文件 不过 我猜现在有更好的东西了 如果我们使用的是 Java 1 6 或更高版本 那么在编写 XML 文件时最好使用什么类 运行速度最快 使用简单 我不需要构建一个 DOM 然后编写整个 DOM
  • 为什么无法从 WEB-INF 文件夹内加载 POSModel 文件?

    我在我的 Web 项目中使用 Spring MVC 我将模型文件放在 WEB INF 目录中 String taggerModelPath WEB INF lib en pos maxent bin String chunkerModelP
  • 如何在不反编译的情况下更改已编译的.class文件?

    我想更改 class 文件方法 我安装 JD Eclipse Decompiler 并打开 class 文件 我添加了一些代码并保存 class 文件 但是 class 文件没有改变 我不知道如何使用反编译器 如果可能的话 如何在不使用反编
  • 使用单独的线程在java中读取和写入文件

    我创建了两个线程并修改了 run 函数 以便一个线程读取一行 另一个线程将同一行写入新文件 这种情况会发生直到整个文件被复制为止 我遇到的问题是 即使我使用变量来控制线程一一执行 但线程的执行仍然不均匀 即一个线程执行多次 然后控制权转移
  • HTTP 状态 405 - 此 URL java servlet 不支持 HTTP 方法 POST [重复]

    这个问题在这里已经有答案了 我无法使页面正常工作 我有要发布的表单方法和我的 servlet 实现doPost 然而 它不断地向我表明我并不支持POST方法 我只是想做一个简单的网站并将值插入到我的 MySQL 数据库中 type Stat
  • BadPaddingException:无效的密文

    我需要一些帮助 因为这是我第一次编写加密代码 加密代码似乎工作正常 但解密会引发错误 我得到的错误是 de flexiprovider api exceptions BadPaddingException 无效的密文 in the 解密函数
  • 如何使用Gson仅从Json反序列化某些特定字段?

    我有以下 JSON 字符串 channel bvmt initValues data value instrumentIds TN0007250012 TN0007500010 instruments mnemonic ADWYA marc
  • Android UnityPlayerActivity 操作栏

    我正在构建一个 Android 应用程序 其中包含 Unity 3d 交互体验 我已将 Unity 项目导入 Android Studio 但启动时该 Activity 是全屏的 并且不显示 Android 操作栏 我怎样才能做到这一点 整
  • Axis2 错误:要输出的文本中的空白字符 (0x4) 无效

    我创建了一个 Java 客户端 使用 Axis2 1 7 6 作为代码生成器与 SOAP Web 服务进行交互 问题在于客户端的某些输入抛出异常并显示以下消息 org apache axis2 AxisFault Invalid white
  • 如何使用自定义 JDK 构建 Jenkins 项目?

    我有一个常规的 Jenkins 实例 运行一些多分支管道 该实例在 JDK 11 上运行 因为 Jenkins 并不真正支持更高版本 没关系 但不好的是 我的所有管道似乎也都受到 Java 11 的限制 Jenkins 仅使用它自己也使用的
  • 决策树和规则引擎 (Drools)

    In the application that I m working on right now I need to periodically check eligibility of tens of thousands of object
  • java中void的作用是什么?

    返回类型 方法返回值的数据类型 如果方法不返回值 则返回 void http download oracle com javase tutorial java javaOO methods html http download oracle

随机推荐

  • 在 pika / RabbitMQ 中处理长时间运行的任务

    我们正在尝试建立一个基本的定向队列系统 其中生产者将生成多个任务 一个或多个消费者将一次获取一个任务 处理它并确认消息 问题是 处理过程可能需要 10 20 分钟 而且我们当时没有回复消息 导致服务器与我们断开连接 这是我们消费者的一些伪代
  • 通知本地化不起作用

    我想本地化通知 并且我发现有这样的属性 例如 title loc key body loc key 用于本地化 I18N 通知标题和正文的 FCM 字段不起作用 例如 android priority normal notification
  • 结合来自 T-SQL 的 XML

    我有两个单独的表 TV 和 Receiver 我正在使用 FOR XML PATH 命令来构建 XML 我的问题是 我想将 TV XML Build 的输出与 Receiver XML Build 的输出结合起来 以创建一个 XML 输出
  • DataStax DDC 服务无法启动

    我刚刚安装了 DataStax Community Edition 但是当尝试运行以下命令时 C gt net start DataStax DDC Server 我得到以下回复 Thanks 我自己也遇到了同样的问题 请尝试以下操作 打开
  • Dagger:如果我每次都*想要*一个新实例怎么办?

    有趣的是 这个答案是多么难以找到 我已经使用 Dagger Android 一段时间了 并且已经设置了整个依赖关系图 我正在使用范围 限定符以及所有这些好东西 我不再是 Dagger 新手 但可以说我一直在 Android 设置中以相当标准
  • 检查是否为空[重复]

    这个问题在这里已经有答案了 这是一个非常简单的问题 但是因为我只做了这门语言一周 所以我还没有找到答案 以下两行之间出现错误 因为Regex随机为空 但我如何检查它是否为空 这样它就不会抛出错误 var Regex span class c
  • 我正在使用两个不同的 jQuery 函数,其中一个似乎抵消了另一个

    我正在尝试使用两块 jquery 作为灯箱和一个滚动条来构建我正在构建的单页网站 它们单独工作都很好 但是当我将它们放在同一页面上时 滚动条似乎取消了灯箱 使其无效 这是灯箱代码 这是滚动条代码
  • 如何在 C++ 中正确返回 null/空对象?

    我是一名 Java 开发人员 试图解决一个简单的 C 任务 在 Java 中 如果我想返回一个空 null 对象 以指示未找到该对象 我只需返回 null 例子 Person getGetByName String name for int
  • iOS5中如何将旧的emoji编码转换为最新的编码?

    遗憾的是 在 iOS5 最终发布后 我收到用户的报告称他们无法登录 因为名字里有emoji符号 苹果改变了emoji的编码 那么用户名包含旧版本的表情符号 我如何将它们转换为新的编码 thanks 具体来说 一个表情符号 老虎 在iOS5中
  • django 注释框架:distinct() 不起作用?

    在评论模型的任何字段上运行distinct 总是返回所有记录 Comment objects values user distinct 用户 1 用户 0 用户 0 用户 0 用户 0 用户 1 用户 1 用户 1 用户 1 Comment
  • 如何获取要从 Elastic Beanstalk 上的 Dockerfile.aws.json 运行的命令?

    我有一个Dockerfile and a Dockerfile aws json AWSEBDockerrunVersion 1 Ports ContainerPort 5000 HostPort 5000 Volumes HostDire
  • 列出 RestEasy 服务的所有公开/可用端点?

    是否可以以简单的方式列出 RestEasy 服务的所有公开 可用端点 有一个 RestEasy 插件 stats 它公开了 resteasy registry 它需要注册在web xml
  • 使用step_naomit进行预测并使用tidymodels保留ID

    在使用随机森林模型进行预测以合并回原始数据帧时 我尝试在行上保留 ID 我在配方中使用了step naomit 它在烘焙训练数据时删除了缺少数据的行 同时也删除了测试数据上缺少数据的记录 不幸的是 我没有 ID 来轻松知道哪些记录被删除 因
  • Java:以管理员身份运行时无法访问 jarfile

    我有一个名为 test jar 的 jar 文件 我使用同一文件夹中的批处理脚本运行该文件 这是批处理代码 java jar test jar pause jar 本身工作没有问题 我可以很好地运行它 但是 如果我尝试以管理员身份运行批处理
  • 如果订阅是在用户帐户上管理的,自动续订订阅是否需要恢复按钮?

    在 WWDC 2013 中 他们提到自动续订订阅需要恢复按钮 但是 在我们的模型中 订阅是通过用户帐户进行管理的 恢复是通过登录帐户来完成的 收据存储在我们的服务器上 拥有恢复按钮实际上不会做任何事情 但如果不使用它会面临被拒绝的风险吗 N
  • dyld:未加载库:@rpath/libswiftAVFoundation.dylib

    我刚刚更新到 Xcode 7 和 swift 2 并完成了转换带来的错误的修复 我终于得到了要构建的项目 但在启动屏幕后我收到一条错误消息 dyld 未加载库 rpath libswiftAVFoundation dylib 引用自 var
  • 致命:坏对象 HEAD

    有人可以帮我解决这个问题吗 我之前曾就此发表过一篇文章 但我无法通过这些答案解决它 请帮忙 我尝试过跑步git fsck full我得到 Checking object directories 100 256 256 done error
  • ORACLE更新后触发器:解决ORA-04091突变表错误

    我正在尝试创建一个触发器 create or replace trigger NAME OF TRIGGER after insert or update on table1 REFERENCING OLD AS OLD NEW AS NE
  • Pandas 对行值进行排序

    我有一个像这样的熊猫数据框 Col1 Col2 Col3 1 1092 203 802 是否可以对这个数据框进行排序并得到这样的结果 Col1 Col3 Col2 1 1092 802 203 I tried sort values但它不起
  • ExecutorService 按顺序执行任务,但从池中获取线程

    我正在尝试构建一个实现ExecutorService 我们称之为SequentialPooledExecutor 具有以下性质 的所有实例SequentialPooledExecutor共享同一个线程池 调用同一个实例SequentialP