java - 我需要同步访问 Java 中的不可变类型吗?

标签 java multithreading synchronization thread-safety

假设我有这门课:

class Zoo
{
    protected String bearName;
    protected Double trainerSalary;
    protected Integer monkeyCount;
}

是否可以一个线程写入这些字段,另一个线程读取它们,而不需要对 Zoo 对象进行同步访问?

注意:这些值可以彼此分开处理,因此在读取 monkeyCount 时更改 trainerSalary 并不重要。

编辑:

澄清一下,字段是可变的;只有它们引用的对象是不可变的

最佳答案

从技术上讲,您需要使它们成为finalvolatile 或使用synchronzied 读取 来保证它们读者将阅读最新的值(value)。正如您现在所拥有的那样,如果一个线程写入一个值,则无法保证另一个线程将读取相同的值。这是因为读取线程可能会看到缓存的值。对于多核 CPU 和各种级别的缓存,这种情况更有可能发生。

这方面的一本好书是 Java Concurrency in Practice .

关于java - 我需要同步访问 Java 中的不可变类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5837826/

相关文章:

java - 当 XML 数据太大而无法放入内存时,如何在 Java 中访问 XML 数据的子集?

java - 如何在抽屉导航菜单中使用彩色图标?

java - 如何计算Jmeter中的响应时间?

java - Swing 和线程

ios - 谁创建并拥有调用堆栈以及调用堆栈如何在多线程中工作?

java - Java中具有可重入锁和条件的生产者消费者场景

java - 反向读写锁

java - 当我尝试删除 Activity 上的操作栏时,为什么会出现此异常?

multithreading - 如何在Matlab中最充分地利用多线程CPU?

javascript - 多设备间同步JS时间