假设我有这门课:
class Zoo
{
protected String bearName;
protected Double trainerSalary;
protected Integer monkeyCount;
}
是否可以一个线程写入这些字段,另一个线程读取它们,而不需要对 Zoo
对象进行同步
访问?
注意:这些值可以彼此分开处理,因此在读取 monkeyCount
时更改 trainerSalary
并不重要。
编辑:
澄清一下,字段是可变的;只有它们引用的对象是不可变的。
最佳答案
从技术上讲,您需要使它们成为final
、volatile
或使用synchronzied
读取和 来保证它们读者将阅读最新的值(value)。正如您现在所拥有的那样,如果一个线程写入一个值,则无法保证另一个线程将读取相同的值。这是因为读取线程可能会看到缓存的值。对于多核 CPU 和各种级别的缓存,这种情况更有可能发生。
这方面的一本好书是 Java Concurrency in Practice .
关于java - 我需要同步访问 Java 中的不可变类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5837826/