2013-03-31 42 views
0

如果我有一类控股私人布尔由setter和getter方法 公之于众,我会设置这些方法为synchronized,如果我想读取和 编写从不同的布尔线程?访问布尔

+0

你有吗?不,但你可能想。对于这一点,同步getter和setter可能不足以保护你,这取决于两个线程正在访问哪些其他数据。你真的需要给我们更多的信息,说明每个线程在做什么来回答问题。 –

回答

0

是的,让制定者和获得者同步是一个好主意。读取或写入布尔值不是原子命令,因此在极少数情况下可能会导致一些问题。 (你不能确定你是否阅读表格RAM或cashe)。除非它是不稳定的。

+0

+1“读取或写入布尔值不是原子的”。但即使对于易失性也是如此,因为简单的分配可能会导致多个JVM指令及其在同步被考虑的这个级别。 – sgp15

3

同步访问简单值通常是不必要的。一般来说,你需要的是将其标记为volatile,这是限制性较小和信息量较大。

这一切都取决于您如何访问价值。

在某些情况下,使用AtomicBoolean可能是最好的方法。这提供了与volatile稍有不同的保证。

有关更多详细信息,请参见问题Java: volatile boolean vs AtomicBoolean问题。