访问/写入布尔对象是否需要同步

Sur*_*ran 6 java synchronization boolean

这似乎是一个非常愚蠢的问题.考虑一下:

我有一个带有getter和setter的简单Boolean对象.现在,很多线程都经常调用这两种方法.

  1. 我是否需要为此布尔值进行同步?
  2. 布尔分配也是原子操作吗?

[更新]: 我已经知道Atomic布尔了.我已经有了很多不同的解决方案,但我是专门为上述2个问题寻找答案和答案的理由.

DVK*_*DVK 10

不,布尔访问不是原子的(在机器代码级别上),尽管它确实需要"Java中只有1个操作".

因此,是的,您需要同步布尔值.

有关代码示例,请参阅本演示文稿的幻灯片4-6 .

在相关的说明中,您不应该在布尔上同步

  • @Suraj:不,你仍然不应该把它用作锁.请记住,锁定基于*object*而不是对象的*reference*.根据您获得它的方式,对布尔值的引用可能指向与其他引用共享的对象.例如,"Boolean.TRUE","(Boolean)true"和"Boolean.valueOf(true)"都将引用同一个对象,这是完全有效的 - 而且非常可能. (2认同)