volatile关键字
1.定义
JVM提供的轻量级的同步机制。
2.作用
- 保证可见性
- 不保证原子性
- 禁止指令重排序
3.原理
如何定义同步(由JMM定义)
- 线程解锁前必须把共享的变量值刷新回主内存
- 线程加锁钱,必须读取主内存的最新值到自己的工作内存
- 加解锁使用同一把锁
为什么要同步
-
JMM中规定所有变量都存储在主内存,主内存为所有线程共享内存区域
-
JVM运行程序的实体是线程,
-
线程创建时JVM都会为其创建一个线程私有的内存区域,栈内存。
-
线程不能直接操作主内存中的变量,各个线程中的工作内存中存储着主内存中的变量副本拷贝
-
线程对变量的操作需要在栈内存中完成,先从主内存拷贝变量至栈内存,然后对变量进行操作,操作完成后将变量写回主内存。
故,线程间通信必须通过主内存完成,即不同线程间无法相互访问对方的工作内存,需要同步。