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.

 

posted @ 2020-05-14 20:37  Risus  阅读(138)  评论(0编辑  收藏  举报