java中的volatile介绍(附实例)

86 阅读2分钟

Java中的挥发性关键字

Volatile 是java中的一个关键字,用于在多个线程访问它时改变其值。

它只适用于成员变量。

我们还有其他的关键字transient ,用于java中的变量声明。

在多线程应用中,如果我们在一个对象中声明一个transient 成员变量,会发生什么?

在多线程应用中,任何对象的状态都可以被多个线程异步修改。

这就造成了不同并发线程之间状态的一致性问题。

为了保持一个对象的状态在所有线程之间的一致性,我们可以声明一个成员变量为transient 。在volatile 关键字的情况下

每当一个线程要执行对象时,它就会试图从内存中获取对象的状态,并在线程执行结束后保存该状态,这样对象的状态就可以在多个并发线程中保持一致。

一步一步地指导如何在多线程中使用volatile关键字

应用

这将被用于拥有线程安全的对象。

声明:

private volatile String mState;  

例子

class Example{

}

volatile 关键字的优势

  • volatile 关键字只用于变量。
  • 这个关键字在类和方法中使用是不合法的。
  • volatile变量的值将从主内存中读取,而不是从多线程应用程序的线程本地缓存中读取。
  • 当多个线程试图访问一个变量时,volatile关键字被用于该变量。
  • 这使得变量能够保证其值始终是一致的。

java中volatile和static关键字的区别

volatilestatic ,用于将其应用于变量。

挥发性静态
每个对象都有单独的volatile变量值静态变量的值对多个对象来说总是一个单一的值
易失性值没有被缓存,并且使用线程间的共享数据。这种值是按线程基础缓存的,当多个线程访问它时,你会得到不一致的值。

java中volatile和synchronized关键字的区别

volatile volatile是一个用于变量的关键字,而 synchronized是一个应用于代码块和方法的关键字。它用于在多线程应用中实现数据的一致性。

挥发性同步
适用于变量适用于方法和代码块
性能良好降低了多线程访问的性能
不存在阻塞线程的问题阻塞一个线程进行等待