请教volatile关键字的用法!!!

s7110110 2001-11-06 05:15:17
由于本人英语水平有限,我在《Java Language Specification Second Edition》看了几遍还是不能完全理解“volatitle”的具体用法,是不是限制线程互斥访问其修饰的变量?但那本书讲的好象没那么简单。请高手指教!!
...全文
135 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
hahaha88 2001-11-07
  • 打赏
  • 举报
回复
volatitle大概是为了“数据同步”,即保证内存中的数据(在不同的thread中的)可视性,
Doug Lea在<cocurrent Programming in Java>> 2版中解释的较好,小衲我。。。
(咬咬牙)。。。咳咳咳咳咳。。。大概是这样的。。。

首先,Java有一个内存模型,这个模型是从Java程序员的眼里看到的,对CPU(单个或多个)/寄
存器/内cache/外cache/主内存/。。。/OS管理内存机制。。。等各方面的一个抽象,但这方面
的spec好象不是很多

根据这个模型,大概是有一个“主内存”,数据在“主内存”中有一个“主copy”,
每一个thread有一个“工作内存”,其中有该数据的“工作copy",在这里,这些
“主内存”/“工作内存”都是从Java看出去的抽象概念,不一定对应于一个硬件
或OS的实体

一个volatitle变量,在加上正确运用synchronized,应该是可以保证当这个变量在
某个thread中被改变了之后,这个变化对其他thread是”可视的“,即这个变量的”
主内存copy"和各个“工作copy”是同步刷新的

所以把一个变量定义为volatitle,在加上正确运用synchronized,理论上可以保证
这个变量在各个thread中都是一致的,这里变了,那里也就跟着变了。但实际上比较
复杂(特别是在不同的硬件/OS平台上,如4个intelCPU的nt40机器),最好还要加上
其他措施,和volatitle一起用,这样才能达到“数据同步”的目的
s7110110 2001-11-06
  • 打赏
  • 举报
回复
可不可以找个人回答我阿??

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧