注意
Java内存模型和Java内存结构是两回事
Java内存模型:(Java Memory Model ,JMM)是来解决在多核多线程下数据共享,存在的原子性、可见性以及有序性问题
Java内存结构:Java代码是要运行在虚拟机上的,而虚拟机在执行Java程序的过程中会把所管理的内存划分为若干个不同的数据区域
回答
Java内存模型是来解决在多核多线程下数据共享,存在的原子性、可见性以及有序性问题
原子性
一个操作是不可中断的,在多线程环境下,一个操作一旦开始就不会被其他线程影响。
可以使用synchronized来保证方法和代码块内的操作是原子性的
可见性
当一个线程修改了某个共享变量的值,其他线程是否能够马上得知这个修改的值,
Java中的volatile关键字提供了一个功能,被修饰的变量在被修改后可以立即同步到主内存,synchronized可以保证多线程环境下只有一个线程访问也可以实现可见性。
有序性
为提高执行效率,CPU还可能对输入代码进行乱序执行,比如1->2->3有可能被优化成1->3->2
volatile关键字会禁止指令重排。synchronized关键字保证同一时刻只允许一条线程操作
延伸阅读:https://blog.csdn.net/javazejian/article/details/72772461