全国统一服务热线

173-6527-0337

新闻中心

当前位置:首页>新闻中心

新手入门学Java

volatile

它是用来在多线程场景下,修改同一变量值的关键词,它可以使得线程可以安全地访问、操作共享变量。

这意味着多个线程能同时使用一个方法和实例,而不会出现任何问题。

该关键词不仅可以修饰Java的基本类型,还可以修改引用类型。

底层原理

上述所有描述都是现象,真正的底层原理是,基于JMM(Java Memor y Model),volatile关键字用来标记Java变量“存储在主内存中”。

更精确地说,对volatile变量的每次读取都会从计算机的主存中读取,而不是从CPU高速缓存中读取,每次写入volatile变量都会写入主存,而不仅仅是写入CPU缓存。

我们知道,当多个线程同时访问共享变量,必须考虑三个方面,包括原子性、可见性和顺序性。

原子性:表示当另一个线程对共享数据执行某些操作时,不应该有线程干扰;

可见性:表示行为对线程共享数据的影响应该可以被其他线程感知到;

顺序性:表示指令执行顺序应该与源代码中表达的顺序相同。

以上三个特性来对volatile进行分析的话,它具有:

可见性,对于一个volatile变量的读,始终可以看到(任意线程)对这个volatile变量较后的写入。

原子性,对任何单个volatile变量的读/写具有原子性。但对于复合操作没有原子性,比如i++等。

顺序性,volatile关键字禁止指令重排序,因此volatile在某种程度上可以增加有序性。


QQ咨询
在线咨询
在线报名
173-6527-0337
173-6527-0337
返回顶部