面试:介绍下Java内存模型
原创 thinkJava 发表于:2019-08-02 14:16:05
  阅读 :146   收藏   编辑

注意

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