如何保证 ThreadPoolExecutor 中的 FIFO 执行顺序

2024-01-09

我用这行代码创建一个 ThreadPoolExecutor :

private ExecutorService executor = new ThreadPoolExecutor(5, 10, 120, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(20, true));

然后,我运行 25 个任务(T01 到 T25),所以情况是:

  • 当前正在运行 5 个任务(T01 至 T05)
  • 20 个任务在队列中等待(T06 至 T25)

当我再放入 1 个任务 (T26) 时,由于队列已满,我预计旧任务 (T06) 会被删除以启动(因为未达到 MaxPoolSize),而新任务 (T26) 会被放置在队列的末尾。队列。

但在现实生活中,如果Queue已满并且MaxPoolSize未达到,newest任务开始。

所以我有 ...

  • 当前正在运行 6 个任务(T01 至 T05 和 T26)
  • 20 个任务在队列中等待(T06 至 T25)

... 代替 ...

  • 当前正在运行 6 个任务(T01 至 T06)
  • 20 个任务在队列中等待(T07 至 T26)

我可以配置 ThreadPoolExecutor 以获得预期结果吗? 我应该使用其他课程吗?

有关信息,请参阅 ThreadPoolExecutor 源代码的一部分

public void execute(Runnable command) {
    if (command == null)
        throw new NullPointerException();
    if (poolSize >= corePoolSize || !addIfUnderCorePoolSize(command)) {
        if (runState == RUNNING && workQueue.offer(command)) {
            if (runState != RUNNING || poolSize == 0)
                ensureQueuedTaskHandled(command);
        }
        else if (!addIfUnderMaximumPoolSize(command))
            reject(command); // is shutdown or saturated
    }
}


private boolean addIfUnderMaximumPoolSize(Runnable firstTask) {
    Thread t = null;
    final ReentrantLock mainLock = this.mainLock;
    mainLock.lock();
    try {
        if (poolSize < maximumPoolSize && runState == RUNNING)
            t = addThread(firstTask);
    } finally {
        mainLock.unlock();
    }
    if (t == null)
        return false;
    t.start();
    return true;
}

Thanks


我会让核心尺寸等于最大值。这就是大多数池的使用方式,我不确定在您的情况下什么时候会出现缺点,但您会按顺序执行任务。

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

如何保证 ThreadPoolExecutor 中的 FIFO 执行顺序 的相关文章

  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • 如何找到给定字符串的最长重复子串

    我是java新手 我被分配寻找字符串的最长子字符串 我在网上研究 似乎解决这个问题的好方法是实现后缀树 请告诉我如何做到这一点或者您是否有任何其他解决方案 请记住 这应该是在 Java 知识水平较低的情况下完成的 提前致谢 附 测试仪字符串
  • 给定两个 SSH2 密钥,我如何检查它们是否属于 Java 中的同一密钥对?

    我正在尝试找到一种方法来验证两个 SSH2 密钥 一个私有密钥和一个公共密钥 是否属于同一密钥对 我用过JSch http www jcraft com jsch 用于加载和解析私钥 更新 可以显示如何从私钥 SSH2 RSA 重新生成公钥
  • 制作一个交互式Windows服务

    我希望我的 Java 应用程序成为交互式 Windows 服务 用户登录时具有 GUI 的 Windows 服务 我搜索了这个 我发现这样做的方法是有两个程序 第一个是服务 第二个是 GUI 程序并使它们进行通信 服务将从 GUI 程序获取
  • Android:捕获的图像未显示在图库中(媒体扫描仪意图不起作用)

    我遇到以下问题 我正在开发一个应用程序 用户可以在其中拍照 附加到帖子中 并将图片保存到外部存储中 我希望这张照片也显示在图片库中 并且我正在使用媒体扫描仪意图 但它似乎不起作用 我在编写代码时遵循官方的Android开发人员指南 所以我不
  • 多个 Maven 配置文件激活多个 Spring 配置文件

    我想在 Maven 中构建一个环境 在其中我想根据哪些 Maven 配置文件处于活动状态来累积激活多个 spring 配置文件 目前我的 pom xml 的相关部分如下所示
  • 加速代码 - 3D 数组

    我正在尝试提高我编写的一些代码的速度 我想知道从 3d 整数数组访问数据的效率如何 我有一个数组 int cube new int 10 10 10 我用价值观填充其中 然后我访问这些值数千次 我想知道 由于理论上所有 3d 数组都存储在内
  • 磁模拟

    假设我在 n m 像素的 2D 表面上有 p 个节点 我希望这些节点相互吸引 使得它们相距越远吸引力就越强 但是 如果两个节点之间的距离 比如 d A B 小于某个阈值 比如 k 那么它们就会开始排斥 谁能让我开始编写一些关于如何随时间更新
  • Spring @RequestMapping 带有可选参数

    我的控制器在请求映射中存在可选参数的问题 请查看下面的控制器 GetMapping produces MediaType APPLICATION JSON VALUE public ResponseEntity
  • 临时表是线程安全的吗?

    我正在使用 SQL Server 2000 它的许多存储过程广泛使用临时表 数据库的流量很大 我担心创建和删除临时表的线程安全性 假设我有一个存储过程 它创建了一些临时表 它甚至可以将临时表连接到其他临时表等 并且还可以说两个用户同时执行存
  • asp.net core / kestrel中的线程管理

    我正在解决我们已迁移到 asp net core 2 0 的 asp net 应用程序的性能 可扩展性问题 我们的应用程序作为应用程序服务托管在 azure 上 并且在任何中等流量的情况下都很容易崩溃 让我困惑的一件事是如何处理多个并发请求
  • Java按日期升序对列表对象进行排序[重复]

    这个问题在这里已经有答案了 我想按一个参数对对象列表进行排序 其日期格式为 YYYY MM DD HH mm 按升序排列 我找不到正确的解决方案 在 python 中使用 lambda 很容易对其进行排序 但在 Java 中我遇到了问题 f
  • Java Integer CompareTo() - 为什么使用比较与减法?

    我发现java lang Integer实施compareTo方法如下 public int compareTo Integer anotherInteger int thisVal this value int anotherVal an
  • 无锁算法真的比全锁算法性能更好吗?

    陈雷蒙德 http blogs msdn com b oldnewthing 一直在做一个huge http blogs msdn com b oldnewthing archive 2011 04 15 10154245 aspx ser
  • 当我从 Netbeans 创建 Derby 数据库时,它存储在哪里?

    当我从 netbeans 创建 Derby 数据库时 它存储在哪里 如何将它与项目的其余部分合并到一个文件夹中 右键单击Databases gt JavaDB in the Service查看并选择Properties This will
  • JGit 检查分支是否已签出

    我正在使用 JGit 开发一个项目 我设法删除了一个分支 但我还想检查该分支是否已签出 我发现了一个变量CheckoutCommand但它是私有的 private boolean isCheckoutIndex return startCo
  • 如何修复 JNLP 应用程序中的“缺少代码库、权限和应用程序名称清单属性”?

    随着最近的 Java 更新 许多人都遇到了缺少 Java Web Start 应用程序的问题Codebase Permissions and Application name体现属性 尽管有资源可以帮助您完成此任务 但我找不到任何资源综合的
  • java.lang.IllegalStateException:驱动程序可执行文件的路径必须由 webdriver.chrome.driver 系统属性设置 - Similiar 不回答

    尝试学习 Selenium 我打开了类似的问题 但似乎没有任何帮助 我的代码 package seleniumPractice import org openqa selenium WebDriver import org openqa s
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两

随机推荐

  • Windows 的二元决策图库

    尝试获得后jinc http www jossowski de projects jinc jinc html在 Windows 下编译并很快遇到数百个编译器错误 我正在寻找将为 Windows 构建的高质量 BDD 库 最好是 C 或 C
  • Laravel 5.2 身份验证 - 如何在每个页面中显示登录用户名和注销链接?

    Laravel 5 2 身份验证 我使用 Laravel 5 2 创建了一个新的身份验证脚手架 php artisan make auth 一切都很完美 除了即使在我在途中登录后我也会收到登录 注册链接 但当我在途中时 它会显示带有注销链接
  • ElasticSearch如何查询最长的任务

    我在 Elastic Search 中有以下格式的数据 POST slots slot 1 taskId 1 datetime 2020 05 10T08 45 44 status START POST slots slot 2 taskI
  • “node_modules”文件夹的用途是什么?

    到底是什么节点模块文件夹以及它的用途是什么 我知道当我们下载任何库时npm 库转到文件夹节点模块 我还知道 当我们要上传它 例如上传到 GitHub 时 我们必须忽略节点模块文件夹 因为它占用大量空间 通过文件包 json我们可以使用下载所
  • 在第 0 行的“C:\”中找不到路径的一部分

    我遇到了一个错误Script Task in SSIS package 我可以找到类似的问题 但它们与我的情况不同 构建脚本失败并出现以下错误 有关错误列表 请参阅下图 严重性代码 说明 项目文件行抑制状态 错误 找不到路径的一部分 C U
  • Scala 的扩展性是否比其他 JVM 语言更好?

    这是我目前知道的唯一提问方式 据了解 Scala 使用 Java 虚拟机 我以为朱比也这么做了 Twitter 将其中间件切换为 Scala 他们可以做同样的事情并使用 Jruby 吗 他们是否可以从 Jruby 开始 而不会因为扩展问题而
  • 隐藏/保护 php-engine 配置文件的最佳实践?

    我刚刚接到一项任务 需要开发一个旧式开发的网页 这意味着 常用的变量 常量和数据库连接变量都在查看php engine中 而不是在单独的文件中 我想我会将它们放入 config php 或 config inc 文件中 然后与 requir
  • 无法将登录页面重定向到安全页面

    我有一个使用 php 创建的登录页面 但在正确登录后无法将其带到管理页面 我知道我使用的登录名是正确的 因为我刚刚创建了它 如果它是错误的 它应该告诉我 然而 一旦我登录 整个页面就变成空白 网址显示我仍在登录页面而不是管理页面 我检查了错
  • 在 OpenAPI 2 中等效使用 oneOf(来自 OpenAPI 3)

    我怎样才能调整这个片段oneOf到等效的 OpenAPI 2 0 版本 formats type array description Possible parameter format items oneOf type string typ
  • kzalloc() - 单次调用的最大大小?

    我们可以在一次调用中使用 kzalloc 分配的最大大小是多少 这是一个非常常见的问题 另外 如果我可以验证该值 请告诉我 上限 在单个 kmalloc kzalloc 请求中可以分配的字节数 是以下函数 处理器 实际上是页面大小 以及 好
  • 如何将两个mySQL数据库合并为一个?

    我有两个数据库 每个数据库包含不同的表 leave sql 和 crm sql 我想将所有休假表转移到 crm 数据库中 我该怎么做呢 如果其他数据库具有与叶子数据库不同的表 那么您所需要做的就是将数据导入到 crm 数据库中 最后 确保您
  • plot() 和 do.call():当使用“...”时,如何将表达式传递给绘图标题?

    当运行以下代码时 我得到Error in as graphicsAnnot text could not find function bold 我怎样才能解决这个问题 my qq lt function x main expression
  • jQuery:如何制作可折叠的树导航?

    我有标题 每个标题都有子项目 当我单击标题时 我希望它切换查看或显示标题内容 这是我到目前为止所拥有的 j h2 click function if j this next is hidden j this next show else j
  • Flutter:如何修复底部溢出

    我有一个带有列布局的 Flutter Widget 它有两个容器 其中一个有一个ListView builder 当页面呈现时我得到一个 底部溢出 169px 我不知道如何解决它 我在谷歌上搜索了解决方案 并尝试了各种方法 例如包装一个或多
  • 如何找到缺失的行?

    我有两个相同的表 A 和 B 这两个表具有相同的字段 例如表 A bin storage plant 和 B bin storage plant 但是当我检查数据时 表A有5238行 B表有5249行 所以我不知道缺少哪11行 我需要帮助来
  • UITableViewCell 内的 UICollectionView

    我注意到 iOS 在使用时非常卑鄙UICollectionView里面一个UITableViewCell 我想要实现的目标是拥有一组图像 UICollectionView方法 内UITableViewCell 我正在尝试模仿 Faceboo
  • IOS - 从应用程序商店安装旧版本的应用程序

    两天前我发布了应用程序的更新 从那时起 我从用户那里听说他们正在使用旧版本的应用程序 真正奇怪的是 用户在应用商店中看到了新的应用描述和屏幕截图 我已经弄清楚如何可靠地重现该问题 这是我可以自己解决的问题吗 我已经联系了苹果公司并在网上进行
  • 在 OS X 10.9 上找不到“ext/slist”文件

    我正在尝试让一些旧的第三方软件在 OS X 10 9 上编译 我通过调整 Makefile 中的设置设法摆脱了大多数编译问题 这些文件最初是为gcc大概是在 2005 年左右 但是 我目前不知道如何克服 C 源文件的这个错误 utility
  • 注入返回字符串 CDI 的生产者方法

    我想使用 CDI 将常量字符串消息注入 JSF Web 应用程序中的托管 bean 这里是生产者类 Named RequestScoped public class StringProducer Produces Named message
  • 如何保证 ThreadPoolExecutor 中的 FIFO 执行顺序

    我用这行代码创建一个 ThreadPoolExecutor private ExecutorService executor new ThreadPoolExecutor 5 10 120 TimeUnit SECONDS new Arra