用户名
Email
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
帖子
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
volatile关键字
volatile关键字
科技颠覆者
论坛元老
|
2025-1-1 17:31:50
|
显示全部楼层
|
阅读模式
楼主
主题
1963
|
帖子
1963
|
积分
5889
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
在Java中,使用volatile关键字修饰一个变量可以带来以下结果:
可见性
:volatile保证了变量的可见性,即当一个线程修改了volatile变量的值时,新值对于其他线程来说是立刻可见的。这意味着,如果一个线程更新了volatile变量,其他线程在访问这个变量时,总是能看到最新的值。
禁止指令重排
:volatile变量的写操作对于后续的读操作是先行发生的,这阻止了编译器和处理惩罚器对volatile变量的读写操作进行指令重排。这有助于保持程序的执行次序与代码中的次序一致。
不保证原子性
:尽管volatile保证了可见性和防止指令重排,但它并不保证复合操作(如size++)的原子性。size++操作实际上包罗了读取size的值、增加1和写回新值这三个步调,volatile只能保证每次单独的读或写操作的原子性,但不能保证这三个步调作为一个整体的原子性。
对size++操作的影响
:如果size字段被声明为volatile,那么每次对size的读写操作都是可见的,但是size++操作仍然不是原子的。这意味着,尽管线程能够看到size的最新值,但它们仍然可能在增加size时发生冲突,导致size的值不正确。
使用场景
:volatile实用于那些只需要保证变量的可见性,而不需要保证复合操作原子性的场景。例如,如果一个变量只被单个线程修改,但需要被多个线程读取,那么使用volatile是合适的
在多线程编程中,如果一个变量没有被声明为volatile,那么它可能不会立刻对其他线程可见,这是由于以下几个原因
:
缓存一致性
:现代处理惩罚器为了提高性能,通常会在CPU的缓存中存储变量的副本。当一个线程修改了一个变量时,这个修改可能首先发生在CPU的缓存中,而不是直接写入主内存。如果没有volatile关键字,其他线程可能仍然从主内存中读取旧的值,因为它们没有意识到变量已经被修改。
指令重排
:编译器和处理惩罚器为了优化性能,可能会对代码的执行次序进行重排。这意味着,即使代码中先有变量的写操作,后有读操作,实际执行时可能会颠倒次序。如果没有volatile关键字,这种重排可能导致一个线程看到变量的旧值,因为它在变量被写入之前就进行了读取。
内存屏障
:volatile关键字在Java中充当内存屏障(memory barrier)的角色,确保在volatile变量的写操作之前的所有操作都完成,并且volatile变量的读操作之后的所有操作都延迟执行。如果没有volatile关键字,这种内存屏障的结果就不存在,导致其他线程可能看不到变量的最新值。
可见性
:volatile关键字确保一个线程对volatile变量的写入对其他线程是可见的。如果没有volatile关键字,一个线程对变量的修改可能不会立刻被其他线程看到,因为这些修改可能仍然停留在修改线程的CPU缓存中。
次序性
:volatile关键字还确保了操作的次序性,即在volatile变量上的写操作对其他线程来说是按照程序中的次序发生的。如果没有volatile关键字,编译器和处理惩罚器可能会改变操作的次序,这可能导致不可预测的行为。
总结来说,volatile关键字在多线程情况中确保了变量的可见性温和序性,防止了由于缓存一致性、指令重排和内存屏障缺失导致的问题。如果没有volatile关键字,线程可能不会立刻看到变量的最新值,这可能导致数据不一致和竞态条件。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
科技颠覆者
论坛元老
这个人很懒什么都没写!
楼主热帖
XAML 设计器已意外退出。(退出代码: e0 ...
OpenCV提取十字标中心点的几种思路 ...
K8S 实用工具之三 - 图形化 UI Lens ...
我分析30w条数据后发现,西安新房公摊 ...
Cesium 案例(二)Web MapTile Service ...
Python itertools 库的使用记录
超融合?本日你被忽悠了吗! ...
【已解决】挖矿病毒 logrotate 185.19 ...
SQLI-LABS(Less-7)
小程序IOS安全区域优化:safe-area-ins ...
标签云
集成商
AI
运维
CIO
存储
服务器
登录参与点评抽奖加入IT实名职场社区
下次自动登录
忘记密码?点此找回!
登陆
新用户注册
用其它账号登录:
关闭
快速回复
返回顶部
返回列表