我正在研究图(节点和顶点)划分算法。
我使用多个线程来尝试识别图中的某些区域。
一旦节点被识别为区域的一部分,我就将节点对象的 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/