我正在研究图(节点和顶点)分区算法.
我使用多个线程来尝试识别图中的某些区域.
一旦节点被识别为区域的一部分,我boolean marked就为节点对象设置为true.
多个线程可以尝试同时标记同一节点.
目前我使用同步来确保没有发生任何不良事
但是因为在所有线程完成处理之后,我从未读过标记的值.我可以摆脱同步代码吗?换句话说,当同时写入布尔变量时,会出现什么问题吗?
同时写入布尔变量时会出现问题吗?
是和不是。当然,结果值不会以某种方式损坏,但在字段上设置哪些更新以及其他线程何时看到这些更新(如果有的话)将是不确定的。
如果您有多个线程使用此布尔值做出决策,则必须在某个时刻提供内存同步。建立该字段的volatile成本非常低,除非您有证据表明这是一个性能问题,否则不建立该字段volatile很可能是过早的优化。如果您正在比较和设置,那么AtomicBoolean建议使用 an 来包装 avolatile boolean并提供更高级别的方法,例如compareAndSet(...).