1.JMM内存模型
JMM 的关键技术点都是围绕着多线程的原子性、可见性和有序性来建立的
- 原子性
原则性是指一个操作是不可中断的。
- 可见性
其一修改,其余接受通知。
- 有序性
即程序执行的顺序按照代码的先后顺序执行。 在并发时,程序的执行可能就会出现乱序。 有序性问题的原因是因为程序在执行时,可能会进行指令重排,重排后的指令与原先的顺序未必一致。
2.volatile关键字
volatile : 易变的,不稳定的。
volatile变量规则:对一个变量的写操作先行发生于后面对这个变量的读操作
volatile保证可见性
一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:
1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。
2)禁止进行指令重排序。
先看一段代码: