Ton*_*ony 1 java multithreading synchronization thread-safety
假设我有这个课程:
class Zoo
{
protected String bearName;
protected Double trainerSalary;
protected Integer monkeyCount;
}
Run Code Online (Sandbox Code Playgroud)
一个线程可以写入这些字段,而另一个线程可以读取它们而无需synchronized访问该Zoo对象吗?
注意:这些值可以彼此分开处理,因此trainerSalary在monkeyCount读取时更改它们并不重要.
编辑:
只是为了澄清,这些领域是可变的 ; 只有他们引用的对象是不可变的.
从技术上讲,你需要让他们final,volatile或读取和使用写出来synchronzied,以保证读者会读的最先进的最新值.正如你现在所拥有的那样,如果一个线程写入一个值,则无法保证另一个线程将读取相同的值.这是因为阅读线程可能会看到缓存值.这更有可能是多核CPU和各种级别的缓存.
一本关于此的好书是Java Concurrency in Practice.