volatile关键字和原理及并发编程的三大特性:原子性,可见性,有序性

http://www.importnew.com/24082.html

首先了解一下并发编程的一些内容:

介绍线程之间读取数据的流程

volatile关键字和原理及并发编程的三大特性:原子性,可见性,有序性_第1张图片

 

原子性

volatile关键字和原理及并发编程的三大特性:原子性,可见性,有序性_第2张图片

 可见性:

volatile关键字和原理及并发编程的三大特性:原子性,可见性,有序性_第3张图片

 volatile关键字和原理及并发编程的三大特性:原子性,可见性,有序性_第4张图片

有序性:

volatile关键字和原理及并发编程的三大特性:原子性,可见性,有序性_第5张图片

volatile关键字和原理及并发编程的三大特性:原子性,可见性,有序性_第6张图片

 

 

开始介绍volatile关键字的作用:

volatile关键字和原理及并发编程的三大特性:原子性,可见性,有序性_第7张图片

但是!!

 

 volatile(应用场景)和synchronized关键字的区别:(volatile修饰变量,synchronize修饰方法或者一个代码块)

 volatile关键字和原理及并发编程的三大特性:原子性,可见性,有序性_第8张图片

 volatile关键字和原理及并发编程的三大特性:原子性,可见性,有序性_第9张图片

volatile关键字和原理及并发编程的三大特性:原子性,可见性,有序性_第10张图片

 上面三点的缩写

用双重判空(DCL):第一重判空:因为 synchronize是消耗性能较严重的操作,所以先判空看看到底要不要同步;

第二重就很显而易见了

 

 原理

volatile关键字和原理及并发编程的三大特性:原子性,可见性,有序性_第11张图片

 2.有序性

 从JVM底层来讲,volatile和9条happen-before原则都有一个叫“内存屏障”的东西,来保证线程实行的顺序

你可能感兴趣的:(Java线程)