社区
Java SE
帖子详情
volatile 具体是什么意思?
wynton
2006-09-20 07:24:21
private volatile double d = 1;
书上的解释是"d 被标记为volatile的,以确保编译器不会对任何读取此值的操作进行优化". 那位高人能否给详细解释一下?谢谢!
...全文
223
4
打赏
收藏
volatile 具体是什么意思?
private volatile double d = 1; 书上的解释是"d 被标记为volatile的,以确保编译器不会对任何读取此值的操作进行优化". 那位高人能否给详细解释一下?谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
bubble1000
2010-06-13
打赏
举报
回复
great
wynton
2006-09-20
打赏
举报
回复
Nobody is interested in this topic! Done.
wynton
2006-09-20
打赏
举报
回复
Thanks a lot!
等待一下其他人的参与,然后就结帖,给分! :-)
anhy
2006-09-20
打赏
举报
回复
关于volatile
我们知道,在Java中设置变量值的操作,除了long和double类型的变量外都是原子操作,也就是说,对于变量值的简单读写操作没有必要进行同步。这在JVM 1.2之前,Java的内存模型实现总是从主存读取变量,是不需要进行特别的注意的。而随着JVM的成熟和优化,现在在多线程环境下volatile关键字的使用变得非常重要。在当前的Java内存模型下,线程可以把变量保存在本地内存(比如机器的寄存器)中,而不是直接在主存中进行读写。这就可能造成一个线程在主存中修改了一个变量的值,而另外一个线程还继续使用它在寄存器中的变量值的拷贝,造成数据的不一致。要解决这个问题,只需要像在本程序中的这样,把该变量声明为volatile(不稳定的)即可,这就指示JVM,这个变量是不稳定的,每次使用它都到主存中进行读取。一般说来,多任务环境下各任务间共享的标志都应该加volatile修饰。
http://www.java-asp.net/java/200512/t_49618.html
http://www.cublog.cn/opera/showart.php?blogid=23216&id=159925
Java synchronized 和
volatile
的区别是什么?有什么优缺点? 有什么作用?
Java synchronized 和
volatile
的区别是什么?有什么优缺点? 有什么作用?
C中指针的
volatile
属性是什么?
如果不使用`
volatile
`,编译器可能会将`*ptr`的值缓存到寄存器中,导致在函数执行过程中`*ptr`的值被外部因素修改后,仍然使用旧值进行计算。2. **`
volatile
`与`const`的兼容性**:一个变量可以同时是`const`和`
volatile
`。3. **指针自身的值也可以是`
volatile
`**:除了指针指向的对象可以是`
volatile
`外,指针自身的值也可以是`
volatile
`。在这个例子中,`ptr`被声明为`
volatile
`,确保其指向的值不会被编译器优化掉。
c语言中%加字母是啥意思,%C是
什么意思
? C语言中%c,%s分别代表
什么意思
?
导航:网站首页 >%C是
什么意思
? C语言中%c,%s分别代表
什么意思
?%C是
什么意思
? C语言中%c,%s分别代表
什么意思
?相关问题:匿名网友:%c单个字符输出的意思。%s是输出字符串。%d是输出整型。%f是输出整型。这是在scanf、printf这样的函数中,将参数类型与输入/输出句子中的相应位置相对应所使用的转义标志符。其中常用的有%c--对应字符型char%s--对应字符串型char...
什么是
volatile
和指令重排?
在 Java 中, 是一个关键字,用于修饰变量。它有以下两个主要作用:保证可见性:当一个线程修改了 变量时,其他线程能够立即看到这个修改。防止指令重排:保证 变量的操作不会被线程内的指令重排优化。指令重排是指在程序执行时,编译器、运行时环境或 CPU 可能会调整指令的执行顺序,以提高性能。例如: 在某些情况下,指令2可能会被提前执行,变成: 这种调整通常是安全的,但在多线程环境下,可能会导致问题。为了防止指令重排,Java 在 变量操作前后插入了内存屏障(Memory Barrier)。内存屏
什么?
Volatile
会造成死循环?假的
今天在系统的学习
Volatile
,看到一个例子,运行起来会死循环,而加了一个
Volatile
就不会,然后引出结论 -----
Volatile
可以使线程回写主存。很多教学视频用这个例子来教学。 我一看,不对劲。因为像例子里面的代码造成的死循环,在我几年的开发过程中,是没有遇到过的。其次,据我所知,在没有加
Volatile
的情况下,线程的内存不存在不回写的情况。之所以会线程不安全是因为线程的内存没有实时与主存同步,而加了
Volatile
可以保证线程可见性。 来看死循环
具体
的实现代码: public clas
Java SE
62,628
社区成员
307,261
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章