JVM-内存模型

Java内存模型 JMM:定义变量(字段实例,静态字段,不包括局部变量与方法参数,因为是线程私有的)的访问规则

1,主内存与工作内存

  主内存

  线程工作内存,变量副本

  线程间变量传递,通过主内存传递

2,主内存和工作内存交互操作

  交互协议:8种操作,每种操作原子化,不可以细分

  lock

  unlock

#####################

  read---load

  store-write

#####################

  use

  assign

  交互操作原则:8个规则

 

  volatile的特性

    可见性,不能保证原子性(所以并发下并非线程安全)

    禁止指令重排序优化:内存屏障,指令重排序

  volatile变量的特殊规则:read,load,use,assign,store,write的特殊规则

  

  long和double的特殊规则:

  64位的数据类型

  非原子性协定

  

3,

原子性,基本类型数据操作为原子性的,更大范围的使用lock/unlock--->monitorenter/monitorexit--->synchronized关键字

可见性,变量修改后将新值同步会主内存,在变量读取前从主内存刷新变量值,共享主内存这种方式实现可见性

  volatile变量的区别是新值能立即同步会主存,每次使用前立即从主存刷新,但是线程操作数栈中的变量不会立即刷新

有序性

  线程内表现为串行语意

  指令重排序

  工作内存与主存同步延迟

  volatile保证有序性:禁止指令重排序语意

  synchronized保证有序性:一个变量在同一时刻只允许一个线程对其lock操作

4,先行发生原则(happens-before):8个

  程序次序规则:同一线程,控制流顺序

  管程锁定规则:同一个锁,unlock先于lock

  volatile变量规则:同一个变量,写先于读

  线程启动规则

  线程终止规则

  线程中断规则

  对象终结规则

  传递性:

  

posted on 2018-01-11 00:00  Vindia  阅读(260)  评论(0)    收藏  举报

导航