java - 多线程写入同一个 boolean 值

标签 java concurrency

我正在研究图(节点和顶点)划分算法。

我使用多个线程来尝试识别图中的某些区域。

一旦节点被识别为区域的一部分,我就将节点对象的 boolean marked 设置为 true。

多个线程可以同时尝试标记同一个节点。

目前我使用同步来确保不会发生任何不良情况。

然而,由于我从未在所有线程完成处理后才读取标记的值。我可以摆脱同步代码吗?换句话说,同时写入 boolean 变量时会出现什么问题吗?

最佳答案

can anything go wrong when concurrently writing to a boolean variable?

是也不是。当然,结果值不会以某种方式损坏,但是对于在字段上设置哪些更新以及其他线程何时看到这些更新(如果有的话),它是不确定的。

如果您有多个线程使用此 boolean 值做出决策,则您必须在某个时候提供内存同步。使字段 volatile 成本非常低,除非您有证据表明这是一个性能问题,否则不让字段 volatile 很可能是过早的优化。如果您正在比较和设置,那么建议使用 AtomicBoolean,它包装一个 volatile boolean 并提供更高级别的方法,如 compareAndSet(...)

关于java - 多线程写入同一个 boolean 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16918237/

相关文章:

java - 从另一个 Play 框架 (1.2.x) 调用一个 URL

java - Simpledate 的线程安全代码

java - 如何使用Reactor框架2.x在多线程映射/归约中捕获/检测异常?

java - 值(value)可见性

haskell - 具有超时的并发 Haskell 操作

java - Eclipse m2e 插件停止更改类路径以添加依赖项

java - 如何在 Java 中从头开始创建 XML 文件?

java - FileInputStream 问题 - 没有段落

java - 开发网络摄像头聊天应用程序

php - 如何让 php 脚本等待用户输入