关键字volatile的使用

本文探讨了Java中的volatile关键字,解释了其在多线程间提供变量可见性的作用,以及它如何避免指令重排序。然而,volatile不保证原子性,对于i++等非原子操作,需要结合synchronized或原子类以确保线程安全。
摘要由CSDN通过智能技术生成

关键字volatile的作用主要有两个。

1.关键字volatile使变量在多个线程间可见

Java内存模型分为工作内存和主内存。工作内存是线程的私有堆栈,主内存是所有线程共享的公共堆栈。根据Java的内存的内存模型,一个变量会存在公共堆栈和线程的私有堆栈中。每次变量的最新值都是公共变量的值,不使用volitale时取得的可能是私有堆栈中的值,私有堆栈的值在读取之前需要和公共堆栈的值进行同步,如果读取私有堆栈值的时候私有堆栈值还没有和公共堆栈值同步,那么从私有堆栈中取得的值就是过期的值,这时就会发生读取数据不一致的问题。

为了解决这个问题,可以给待访问的变量加上volatile关键字。当线程访问一个变量时,如果该变量使用volatile关键字,那么JVM就会强制从公共堆栈中取得变量的值,而不是从线程私有数据栈中取得变量的值。volatile关键字解决线程私有堆栈中数据和公共堆栈中的数据不同步的问题。

volatile的用法就在是要访问的变量的前面加一个volatile关键字修饰,如:

volatile private boolean isRunning = true;

不使用volitale关键字和使用volitale关键字读取变量时,从内存中获取数据的方式的变化如图:

图(1)不使用使用volitale关键字读取变量

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值