Java中的挥发性关键字
Volatile 是java中的一个关键字,用于在多个线程访问它时改变其值。
它只适用于成员变量。
我们还有其他的关键字transient ,用于java中的变量声明。
在多线程应用中,如果我们在一个对象中声明一个transient 成员变量,会发生什么?
在多线程应用中,任何对象的状态都可以被多个线程异步修改。
这就造成了不同并发线程之间状态的一致性问题。
为了保持一个对象的状态在所有线程之间的一致性,我们可以声明一个成员变量为transient 。在volatile 关键字的情况下
每当一个线程要执行对象时,它就会试图从内存中获取对象的状态,并在线程执行结束后保存该状态,这样对象的状态就可以在多个并发线程中保持一致。
一步一步地指导如何在多线程中使用volatile关键字
应用
这将被用于拥有线程安全的对象。
声明:
private volatile String mState;
例子
class Example{
}
volatile 关键字的优势
volatile关键字只用于变量。- 这个关键字在类和方法中使用是不合法的。
- volatile变量的值将从主内存中读取,而不是从多线程应用程序的线程本地缓存中读取。
- 当多个线程试图访问一个变量时,volatile关键字被用于该变量。
- 这使得变量能够保证其值始终是一致的。
java中volatile和static关键字的区别
volatile 和static ,用于将其应用于变量。
| 挥发性 | 静态 |
|---|---|
| 每个对象都有单独的volatile变量值 | 静态变量的值对多个对象来说总是一个单一的值 |
| 易失性值没有被缓存,并且使用线程间的共享数据。 | 这种值是按线程基础缓存的,当多个线程访问它时,你会得到不一致的值。 |
java中volatile和synchronized关键字的区别
volatile volatile是一个用于变量的关键字,而 synchronized是一个应用于代码块和方法的关键字。它用于在多线程应用中实现数据的一致性。
| 挥发性 | 同步 |
|---|---|
| 适用于变量 | 适用于方法和代码块 |
| 性能良好 | 降低了多线程访问的性能 |
| 不存在阻塞线程的问题 | 阻塞一个线程进行等待 |