Java基础之线程8-java volatile
先解释下cpu指令重排序:cup的执行效率一般是内存的100倍左右,假设当cup先后接收到两条指令,指令1和指令2,指令1在执行指令到内存给cpu返回结果需要5秒,但是指令2的整个过程只需要2秒,那么cpu会优先执行指令2,再执行指令1,这就叫cpu指令重排序.
请看图解:
那么volatile:
1. 就是要禁止这种cpu指令重排序,让cpu指令按顺序执行.
2. 保持线程的可见性
那么volatile是怎么禁止这种cpu指令重排序的呢?请看下图,使用内存屏障保证了cpu指令不会重排序。
Volatile在JVM层面的实现细节:
在底层就是加了个 lock: addl 来实现Volatile.