Volatile解析
Volatile解析 Volatile是jvm提供的轻量级的同步机制,具有三大特性: 保证可见性 不保证原子性 禁止指令重排 1.JMM及可见性 想要了解volatile的三大特性,首先需要了解JMM(Java Memory Model,Java内存模型)。JMM本身是一种抽象的存在,它描述了一种规范,规定了程序中各种变量的访问方式。JMM关于同步的规定包括下面三部分: 线程解锁前,必须把共享变量的值刷新回主内存 线程加锁前,必须读取主内存中最新值到自己的工作内存 加锁解锁是同一把锁 何为主内存、工作内存? 在硬件层面,计算机的存储主要分为以下几:硬盘、内存、缓存(cache),其中缓存是用于内存与cpu交流的桥梁,因为cpu的运算速度远高于内存的读写,cpu不能总是等待数据从内存中读取,所以引入缓存,将cpu需要的数据先从内存读取到缓存中,cpu使用时直接从缓存中获取,数据处理完之后放回到缓存中,再将缓存中最新的数据同步到内存中。 主内存和工作内存的概念跟内存和缓存的概念十分相似,主内存就相当于内存,多线程共用一份,工作内存就相当于缓存,数据是从主内存中拷贝的副本。java程序的运行是承载在线程上的,每个线程都有自己的一份私有数据空间,也就是工作内存,而JMM规定所有变量的值都存储在主内存中,供所有线程共享使用,但是线程对变量的操作必须在自己的工作内存中进行,因此线程在操作变量前