volatile关键字作用

本文探讨了Java并发编程中的三个关键问题:原子性、可见性和有序性,并详细解释了volatile关键字的作用。volatile保证了变量的可见性和有序性,但不解决原子性问题。文章还介绍了内存和高速缓存的概念,以及如何解决缓存不一致问题。
摘要由CSDN通过智能技术生成

这篇文章是我对volatile关键字的整理,为了方便之后复习查看。
如果面试官问我volatile,我先概括并发编程的三个问题:

  1. 原子性 操作系统保证一个指令集合的执行是原子性(套娃),即要不都执行,要不不执行。保证执行过程不会被中断或者调度。
  2. 可见性 是指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。
  3. 有序性 指令重排的问题,就是操作系统为了优化,就可能不保证执行顺序像你源代码写的那样一行行来。
并发编程中的三个问题

对于这三个概念的说明和举例大家都是一模一样,可以参见这篇文章:Java并发编程:volatile关键字

好多内容都是那篇文章看的。

内存的相关概念

在这里插入图片描述
首先知道cpu中一块区域叫做高速缓存,为了缓解内存和cpu速度差异过大的问题。cpu执行程序时,优先从高速缓存中查找有没有对应的缓存变量。如果是多线程执行,在多核系统下, 这个程序中的一个共享变量可能会被拷贝多份在不同的高速缓存中,当其中一个线程对其改变值时,写回的时候只会暂时停留在高速缓存这个层面,而不是内存,所以就引发一个问题,一个线程修改后,其他线程还是用的老的那个值,这就是缓存不一致的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值