JAVA内存模型 简称:JMM
用于java线程之间的通信
JMM通过控制主内存与每个线程的本地内存之间的交互,来为java程序员提供内存可见性保证
final只是指向不变,但是指向的值有可能变,所以依然不是线程安全
(this引用逃逸是一件很危险的事情,其他线程有可能通过这个引用访问到“初始化了一半”的对象),那在其他线程中就能看见final字段的值。
synchronize和voliate,前者保证了原子性、可见性。后者只保证了可见性
voliate可见性的保证,就是因为在os的指令前加了一个lock,这个指令是使所有的线程工作内存无效,强制从主内存读写。
synchronized可见性的保证,就是因为锁,也就是同步块