一、volatile是Java虚拟机提供的轻量级的同步机制 -保证可见性 -不保证原子性 -禁止指令重排 二、JMM你谈谈 JMM(Java内存模型,简称JMM)自己是一种抽象的概念并不真实存在 ,它描述的是一组规则或规范,经过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式。数组
JMM关于同步的规定: 1.线程解锁前,必须把共享变量的值刷新回主内存。 2.线程加锁前,必须读取主内存的最新值到本身的工做内存。 3.加锁解锁是同一把锁。线程
因为JVM运行程序的实体是线程,而每一个线程建立时JVM都会为其建立一个工做内存(有些地方称为栈空间),工做内存是每一个线程的私有数据区域,而Java内存模型中规定全部变量都存储到 主内存,主内存是共享内存区域,全部线程均可以访问,但线程对变量的操做(读取、复制等)必须在工做内存中进行,首先要将变量从主内存拷贝到本身的工做内存空间,而后对变量进行操做,操做完成后再将变量写回主内存,不能直接操做主内存中的变量,各个线程中的工做内存中存储着主内存中的变量副本拷贝 ,所以不一样的线程间没法访问对方的工做内存,线程间的通讯(传值)必须经过主内存来完成,其简要访问过程以下图:对象