Java之volatile关键字

Java之volatile关键字

简述:
volatile是JVM提供的轻量级的同步机制,其具有以下特点:
1、保证可见性
2、不保证原子性
3、禁止指令重排

保证可见性
我们知道,JMM(一种抽象的Java内存模型)中规定,线程不能直接在内存中操作变量,每一个线程操作对象必须先从内存中获取变量的值,然后在本线程的工作内存中操作数据,操作结束后再将变量写入主内存,从而完成对内存中变量的修改。
但是多线程下,线程A,B都从中获得同一个变量,但A对变量进行修改后,B线程并不知道,仍用原来的数据进行修改。这就是线程之间的不可见性。使用volatile关键字修饰的变量,可以保证可见性,即任意一个线程在其工作内存中修改该变量并写入内存后会通过CPU去通知其他线程,该变量已被修改,则其他线程需要重新向内存中再次读取数据!!!这样便保证了可见性

不保证原子性
比如多个线程一起执行i++的操作,i是被volatile修饰的变量,多个线程都从主内存读取了i的值,并在自己的工作空间对其加1,而后二者同时将其放回主内存,此时虽然多个线程都做了加1操作,但实际结果却相当于只做了一次该操作。

禁止指令重排序
volatile关键字禁止指令重排序
详情可转下方链接
指令重排序

你可能感兴趣的:(JAVA多线程,多线程,并发编程,volatile)