一方面,在多处理器架构中,单个处理器一般都有自己的高速缓存,既然是缓存,就有可能和主存不同步。通常我们不会让线程间的每次读写都做同步,因为这样性能代价太高。
另外一个方面,也是为了性能,编译器可能会对语句进行重排,而重排也会导致多线程的数据一致性问题。
而Java内存模型(Java Memory Model (JMM))就定义了多线程程序被允许的行为,同时也规定了代码重排的规则。有了这些规则,我们就可以控制和解释多线程下的代码优化和执行。
一方面,在多处理器架构中,单个处理器一般都有自己的高速缓存,既然是缓存,就有可能和主存不同步。通常我们不会让线程间的每次读写都做同步,因为这样性能代价太高。
另外一个方面,也是为了性能,编译器可能会对语句进行重排,而重排也会导致多线程的数据一致性问题。
而Java内存模型(Java Memory Model (JMM))就定义了多线程程序被允许的行为,同时也规定了代码重排的规则。有了这些规则,我们就可以控制和解释多线程下的代码优化和执行。