《Java并发编程的艺术》读书笔记——volatitle

本文深入探讨了Java中的volatile关键字原理及其应用。通过解释volatile如何通过Lock指令确保多处理器环境下的变量可见性,帮助读者理解其在并发编程中的作用。

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

volatitle原理与应用

说到Java多线程编程就不得不说volatitle这个关键词。volatitle是一种和sychronized差不多功用的东东,是轻量级的synchronized,它能保证共享变量在多处理器开发的“可见性”。这里的“可见性”指的是当两个线程在共享一个变量x的时候,由于缓存的问题,两个线程的CPU核会各有一份x,如果没有用volatitle的话,当我们在其中一个线程中修改x的值,另一个线程将访问的是缓存中的值,并不是修改后的值。这在并发编程中就会出现一些意料不到的情况。那么volatitle是如何实现保证“可见性”的呢

volatitle变量编译后会添加一个Lock指令

Lock指令在执行时多核处理器会引发两件事:

(1)将当前处理器缓存行的数据写回到系统内存

(2)这个写回内存的操作会使其他CPU里缓存了该内存地址的数据无效。

并且在这两件事上,系统使用了锁锁定这块内存区域的缓存,并使用缓存一致性机制来确保修改的原子性,缓存一致性机制会阻止同时修改由两个以上处理器缓存的内存区域数据。

根据这两件事,我们就可以看到volatitle为什么可以保证共享变量的“可见性”了。

在多核处理器系统中,处理器能够嗅探其他处理器访问系统内存和他们的内部缓存。简单地说就是如果一个处理器发现其他处理器正在写一个共享数据的内存的话,那么这个处理器将会使自己内部的这个变量的缓存无效化,下次再访问这个缓存的时候就会强制去读内存,而不是直接读缓存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值