如何使用关键原子逻辑安全地中断线程?

2024-02-20

我有一个线程在循环中执行两件事:等待 BlockingQueue 中的对象,然后处理它们。处理逻辑具有可在 JVM 外部观察到的效果,并且必须以原子方式完成。

目前,该线程由一个易失性布尔变量控制,如中讨论的https://stackoverflow.com/a/10961760/499922 https://stackoverflow.com/a/10961760/499922。但是,这意味着如果队列上没有更多消息可供线程使用,线程将不会停止。 'Thread.interrupt()` 不能用于解决此问题,因为它可能会中途中断原子操作。

有什么办法可以中断take()队列上的方法但没有任何其他操作?


我发现在这种情况下最好的方法是使用“毒丸” - 您将一个对象放置在队列中,该对象的存在仅用于切换某个操作。

它在 Java 并发实践中被广泛讨论(我的副本中的第 155 页,7.2.3)。看here http://www.javaconcurrencyinpractice.com/listings/IndexingService.java对于该部分的编程示例。

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

如何使用关键原子逻辑安全地中断线程? 的相关文章

  • 如何在 Play java 中创建数据库线程池并使用该池进行数据库查询

    我目前正在使用 play java 并使用默认线程池进行数据库查询 但了解使用数据库线程池进行数据库查询可以使我的系统更加高效 目前我的代码是 import play libs Akka import scala concurrent Ex
  • 控制Android的前置LED灯

    我试图在用户按下某个按钮时在前面的 LED 上实现 1 秒红色闪烁 但我很难找到有关如何访问和使用前置 LED 的文档 教程甚至代码示例 我的意思是位于 自拍 相机和触摸屏附近的 LED 我已经看到了使用手电筒和相机类 已弃用 的示例 但我
  • 反射找不到对象子类型

    我试图通过使用反射来获取包中的所有类 当我使用具体类的代码 本例中为 A 时 它可以工作并打印子类信息 B 扩展 A 因此它打印 B 信息 但是当我将它与对象类一起使用时 它不起作用 我该如何修复它 这段代码的工作原理 Reflection
  • 斯坦福 NLP - 处理文件列表时 OpenIE 内存不足

    我正在尝试使用斯坦福 CoreNLP 中的 OpenIE 工具从多个文件中提取信息 当多个文件 而不是一个 传递到输入时 它会给出内存不足错误 All files have been queued awaiting termination
  • IO 密集型任务中的 Python 多线程

    建议仅在 IO 密集型任务中使用 Python 多线程 因为 Python 有一个全局解释器锁 GIL 只允许一个线程持有 Python 解释器的控制权 然而 多线程对于 IO 密集型操作有意义吗 https stackoverflow c
  • 核心数据 iCloud 同步中的关系完整性和验证

    考虑以下简单的实体模型 实体 A 与实体 B 具有一对一关系 称为b 实体 B 具有逆对一关系 称为a 这两种关系都不是可选的 A B b lt gt a 假设我们有两个设备 1 和 2 开始完全同步 每个对象都有一个 A 类对象和一个 B
  • Eclipse Java 远程调试器通过 VPN 速度极慢

    我有时被迫离开办公室工作 这意味着我需要通过 VPN 进入我的实验室 我注意到在这种情况下使用 Eclipse 进行远程调试速度非常慢 速度慢到调试器需要 5 7 分钟才能连接到远程 jvm 连接后 每次单步执行断点 行可能需要 20 30
  • Google App Engine 如何预编译 Java?

    App Engine 对应用程序的 Java 字节码使用 预编译 过程 以增强应用程序在 Java 运行时环境中的性能 预编译代码的功能与原始字节码相同 有没有详细的信息这是做什么的 我在一个中找到了这个谷歌群组消息 http groups
  • 如何从指定日期获取上周五的日期? [复制]

    这个问题在这里已经有答案了 如何找出上一个 上一个 星期五 或指定日期的任何其他日期的日期 public getDateOnDay Date date String dayName 我不会给出答案 先自己尝试一下 但是 也许这些提示可以帮助
  • 玩!框架:运行“h2-browser”可以运行,但网页不可用

    当我运行命令时activator h2 browser它会使用以下 url 打开浏览器 192 168 1 17 8082 但我得到 使用 Chrome 此网页无法使用 奇怪的是它以前确实有效 从那时起我唯一改变的是JAVA OPTS以启用
  • 获取 JVM 上所有引导类的列表?

    有一种方法叫做findBootstrapClass对于一个类加载器 如果它是引导的 则返回一个类 有没有办法找到类已经加载了 您可以尝试首先通过例如获取引导类加载器呼叫 ClassLoader bootstrapLoader ClassLo
  • 静态变量的线程安全

    class ABC implements Runnable private static int a private static int b public void run 我有一个如上所述的 Java 类 我有这个类的多个线程 在里面r
  • 在 Maven 依赖项中指定 jar 和 test-jar 类型

    我有一个名为 commons 的项目 其中包含运行时和测试的常见内容 在主项目中 我添加了公共资源的依赖项
  • 如何修复 JNLP 应用程序中的“缺少代码库、权限和应用程序名称清单属性”?

    随着最近的 Java 更新 许多人都遇到了缺少 Java Web Start 应用程序的问题Codebase Permissions and Application name体现属性 尽管有资源可以帮助您完成此任务 但我找不到任何资源综合的
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现
  • 将 List 转换为 JSON

    Hi guys 有人可以帮助我 如何将我的 HQL 查询结果转换为带有对象列表的 JSON 并通过休息服务获取它 这是我的服务方法 它返回查询结果列表 Override public List
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview
  • 如何实现仅当可用内存较低时才将数据交换到磁盘的写缓存

    我想将应用程序生成的数据缓存在内存中 但如果内存变得稀缺 我想将数据交换到磁盘 理想情况下 我希望虚拟机通知它需要内存并将我的数据写入磁盘并以这种方式释放一些内存 但我没有看到任何方法以通知我的方式将自己挂接到虚拟机中before an O
  • 使用 xpath 和 vtd-xml 以字符串形式获取元素的子节点和文本

    这是我的 XML 的一部分

随机推荐

  • 如何让活动指示器等待函数

    我想使用活动指示器来显示我的函数正在加载 它运行得如此之快 我可以看到我的活动指示器 但该功能尚未完成加载 问题 当函数真正完成运行时 如何使用使我的活动指示器为 false 这是我的代码 public MainPage Initializ
  • 如何清除Docker任务历史记录

    当以 Swarm 模式运行 docker 时 过去任务的历史记录会随着 docker 服务的更新而累积 跑步docker node ps显示任务日志 如何在不删除服务的情况下清除此日志 您可以通过运行以下命令来调整 swarm 中的历史记录
  • IE9拒绝加载自定义字体?

    我正在尝试让 IE9 显示自定义字体 应该很容易 研究了大量的谷歌网站 甚至 stackoverflow 问题 这就是我所拥有的 font face font family BrushstrokePlain src url fonts BR
  • 了解 git rev-list

    在寻找 git hook 示例时 我遇到了以下帖子 https github com Movidone git hooks blob master pre receive https github com Movidone git hook
  • Stackdriver 监控图表的算术运算

    我正在尝试为我的服务提供的自定义指标设置 Stackdriver 仪表板 特别是我从一般开始custom grpc time ms指标是一个量规并且有status上面有标签 我希望能够设置一个图表并针对指标的成功率发出警报 类似于count
  • Azure AppInsights - Http 结果代码故障

    我们已经在Azure中配置了API WebApp 然后连接了App Insights Log以获取失败时的详细信息 我们正在 APIM 上进行负载测试 有一次 我们开始收到 500 错误代码 这意味着应用程序级别存在问题 当我们查看详细信息
  • 何时使用 C++forward_list

    我对 C 有点陌生 正在阅读 C 编程语言 第 4 版 一书 在阅读 STL Containers 章节时 书中对forward list有介绍 forward list 单链表 基本上是一个优化的列表 对于空的和非常短的列表 空的forw
  • 优化整数系数列表与其长整数表示之间的转换

    我正在尝试优化我的多项式实现 特别是我正在处理系数模的多项式n 可能 gt 2 64 并对以下形式的多项式取模x r 1 r is lt 2 64 目前 我将系数表示为整数列表 并且我已经以最直接的方式实现了所有基本操作 我希望求幂和乘法尽
  • Chrome 扩展程序 MAX_WRITE 配额未补充

    我最近超出了 chrome 扩展中每小时允许的写入操作数 现在当我尝试使用 chrome storage 时收到此消息 Unchecked runtime lastError while running storage set This r
  • Spring Security JavaConfig:配置所需的通道(安全、不安全、任意)

    我试图通过任何渠道提供所有静态资源 css javascript 和图像 但无法让它与 anyRequest requiresInsecure Configuration EnableWebMvcSecurity PropertySourc
  • 通过滚动查找所有元素

    查找页面上所有具有滚动的元素的最可靠和最有效的方法是什么 目前 我正在考虑使用element all http angular github io protractor api view ElementArrayFinder with fi
  • 组合框在所选项目上绘制图像

    当选择该项目时 我尝试从组合框中的图像列表中绘制图像 我能够绘制图像 但是当onSelctedIndexChanged活动结束 我失去了我的形象 我的组合框已经有DrawMode OwnerDrawFixed 我有一个ListImage名为
  • 管理员权限被意外删除

    在尝试清除 Sonar 实例中不需要的用户 权限时 管理员的权限似乎已被撤回 我们再也看不到settings菜单项 通常出现在管理员登录链接旁边 无法再更改警报 我现在花了几个小时试图找出这些权限在数据库中的位置 并希望使用数据库中的一些插
  • 主干推送状态和错误 404

    我正在尝试实施 pushState true 但它仅适用于基本路线 不适用于其他继续给我错误 404 的路线 在 Chrome 中 如果我访问 http example app http example app OK 控制台消息显示 htt
  • 在 Elixir 中将映射转换为关键字列表

    我有一张以下形式的地图 browser name gt Chrome platform gt linux 我需要将其转换为关键字列表 browser name Chrome platform linux 实现这一目标的最佳方法是什么 这行不
  • 在这里疯了,不明白为什么 rename()、copy() 函数不起作用

    这是我所拥有的 name image jpeg to var www vhosts site com httpdocs termination files personal photos original name from var www
  • 按变量名迭代结构体

    更新 6个月后 我刚刚发现了这个答案 索引结构是否合法 Slava 的回答 https stackoverflow com a 40590471 2066079 我认为这是一个比这里提供的任何解决方案都要好得多的解决方案 因为绝对没有未定义
  • UIImagePickerController 在 iOS 9 上不请求权限

    我有一个 iOS 应用程序 我在其中展示了一个图像选择器 self picker UIImagePickerController alloc init self picker delegate self self picker source
  • 在 N 球面上生成均匀分布的随机点的算法

    我还没有在Python上找到这种算法的实现 像这样的事情 有两个输入参数 n 空间维度 m n 1 球面上的点数 我需要将它们大致均匀地排列在 n 球体的表面上 坐标轴位于n 1个球体的中心 例如 在 3d 中 可以在规则球体上定位点像这样
  • 如何使用关键原子逻辑安全地中断线程?

    我有一个线程在循环中执行两件事 等待 BlockingQueue 中的对象 然后处理它们 处理逻辑具有可在 JVM 外部观察到的效果 并且必须以原子方式完成 目前 该线程由一个易失性布尔变量控制 如中讨论的https stackoverfl