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

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(使用前将#替换为@)

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

  • 在不支持 CAS 操作的处理器上进行 CompareAndSet

    今天 我在一次采访中被问到下一个问题 如果您在具有不支持 CAS 操作的处理器的机器上调用 AtomicLong 的compareAndSet 方法 会发生什么情况 您能否帮我解决这个问题 并在可能的情况下提供一些全面描述的链接 From
  • Java 中的 <-- 是什么? [复制]

    这个问题在这里已经有答案了 我遇到了下面的片段 它输出到4 3 2 1 我从来没有遇到过 lt 在爪哇 Is lt 使 var1 的值变为 var2 的运算符 public class Test public static void mai
  • 查看Java Agent修改的Java类的源代码

    我需要了解 Java 代理如何修改我的初始类 以便我能够理解代码的作用 build gradle configurations jar archiveName agent2 jar jar manifest attributes Prema
  • 通过Zuul上传大文件

    我在通过 zuul 上传大文件时遇到问题 我正在使用 apache commons 文件上传 https commons apache org proper commons fileupload https commons apache o
  • 什么是内部类的合成反向引用

    我正在寻找应用程序中的内存泄漏 我正在使用的探查器告诉我寻找这些类型的引用 但我不知道我在寻找什么 有人可以解释一下吗 Thanks Elliott 您可以对 OUTER 类进行合成反向引用 但不能对内部类实例进行合成 e g class
  • 无法使用 datastax java 驱动程序通过 UDT 密钥从 cassandra 检索

    我正在尝试使用用户定义的类型作为分区键将对象存储在 cassandra 中 我正在使用 datastax java 驱动程序进行对象映射 虽然我能够插入到数据库中 但无法检索该对象 如果我更改分区键以使用非 udt 例如文本 我就能够保存和
  • 自定义列表字段点击事件

    我正在编写一个应用程序 其中我创建了用于显示列表视图的自定义列表字段 我的 CustomListField 包含连续的一个图像和文本 我正在通过单击列表字段行获取字段更改侦听器 但我也想将字段更改侦听器放在图像上 谁能告诉我我该怎么做 这是
  • 为什么用scala写的代码比用java写的慢6倍?

    我不确定我在编写 scala 代码时是否犯了一些错误 问题是 The four adjacent digits in the 1000 digit number that have the greatest product are 9 9
  • 使用 OkHttp 下载损坏的文件

    我编写的下载文件的方法总是会产生损坏的文件 public static String okDownloadToFileSync final String link final String fileName final boolean te
  • JOOQ 忽略具有默认值的数据库列

    看来JOOQ完全忽略了数据库列的默认值 既不会更新 ActiveRecord 对象 也不会在 INSERT 时跳过此列 相反 它尝试将其设置为 NULL 这在 NOT NULL 列上失败 Example CREATE TABLE bug f
  • getCurrentSession 在网络中休眠

    我正在使用 hibernate 和 jsp servlet 编写一个基于 Web 的应用程序 我读过有关sessionFactory getCurrentSession and sessionFactory openSession方法 我知
  • 如何在 IntelliJ IDEA 中运行 akka actor

    来自 Akka 网站文档 然后 这个主要方法将创建所需的基础设施 运行演员 启动给定的主要演员并安排 一旦主要参与者终止 整个应用程序就会关闭 因此 您将能够使用类似于以下的命令运行上面的代码 下列的 java classpath akka
  • 无需递归即可对可观察结果进行分页 - RxJava

    我有一个非常标准的 API 分页问题 您可以通过一些简单的递归来处理 这是一个捏造的例子 public Observable
  • 如何自定义舍入形式

    我的问题可能看起来很简单 但仍然无法得到有效的东西 我需要自定义 Math round 舍入格式或其他格式以使其工作如下 如果数字是 1 6 他应该四舍五入到 1 如果大于或等于 1 7 他应该四舍五入到 2 0 对于所有其他带有 6 的小
  • Tomcat 6 未从 WEB-INF/lib 加载 jar

    我正在尝试找出我的 tomcat 环境中的配置问题 我们的生产服务器正在运行 tomcat 安装并从共享 NFS 挂载读取战争 然而 当我尝试使用独立的盒子 及其配置 进行同样的战争时 我收到下面发布的错误 有趣的是 如果我将 WEB IN
  • titledBorder 标题中的图标

    您好 是否可以在 titledBorder 的标题中放置一个图标 例如以下代码 import java awt GridLayout import javax swing JFrame import javax swing JLabel i
  • 即使禁用安全性,OAuth 令牌 API 也无法在 Elastic Search 中工作

    我是 Elastic search 新手 使用 Elastic search 版本 7 7 1 我想通过以下方式生成 OAuth 令牌弹性搜索文档 https www elastic co guide en elasticsearch re
  • 什么是 Java2D 处理程序线程?

    我创建了一个使用 Hibernate 的示例 java 应用程序 当我进行线程转储时 我观察到一个名为 Java2D Disposer 的奇怪线程 有人能告诉我该线程的功能吗 AWT 系统中的某些实体需要最终确定以释放资源 最突出的例子是j
  • 在会话即将到期之前调用方法

    我的网络应用程序有登录的用户 有一个超时 在会话过期之前 我想执行一个方法来清理一些锁 我已经实现了sessionListener但一旦我到达public void sessionDestroyed HttpSessionEvent eve
  • C#中为线程指定特殊的cpu

    我有 2 个线程 我想告诉其中一个在第一个 cpu 上运行 第二个在第二个 cpu 上运行 例如在具有两个 cpu 的机器中 我怎样才能做到这一点 这是我的代码 UCI UCIMain new UCI Thread UCIThread ne

随机推荐

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

    我想使用活动指示器来显示我的函数正在加载 它运行得如此之快 我可以看到我的活动指示器 但该功能尚未完成加载 问题 当函数真正完成运行时 如何使用使我的活动指示器为 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