线程-volatile关键字

本文详细解释了Java中volatile关键字的概念及作用。它确保了多线程环境下变量的可见性,但不具备原子性。通过实例说明了volatile如何提升多处理器环境下变量的一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

volatile关键字概念:主要作用是让变量在多个线程之间可见,并不具备原子性。

在java中每个线程都有一个工作内存区,每个工作内存区中都拷贝了一份所有被共享的主内存中的变量,线程在自己的工作内存中所操作的这些变量都是拷贝过来的,不用再去主内存中去获取了。

volatile的作用就是强制线程到主内存(共享内存)中去读取被volatile修饰的变量,而不去线程工作内存中去获取,从而实现了多个线程的变量可见,也就满足了线程安全的可见性。

volatile不能满足原子性(同步),如果想要保持同步建议选用AtomicInteger。



在本次线程内,当读取一个变量时,为提高存取速度,编译器优化时有时会先把变量读取到一个线程本地内存中;以后再取变量值时,就直接从本地内存中取值;当变量值在本线程里改变时,会同时把变量的新值copy到本地内存中,以便保持一致;在某个特定的时候,将本地内存的更改写到系统主内存中去;当变量在因别的线程等而改变了值,并且该变化没有写到系统主内存,本次线程的本地内存中的值不会相应改变,从而造成应用程序读取的值和实际的变量值不一致;但是当变量被volatile修饰后,每次更改该变量的时候会将更改结果写到系统主内存中,利用多处理器的缓存一致性,其他处理器会发现自己的缓存行对应的内存地址被修改,就会将自己处理器的缓存行设置为失效,并强制从系统主内存获取最新的数据。这样就能保证即使在别的线程中改变了该变量的值,在本线程中也能取到最新更改后的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值