private volatile double d = 1;书上的解释是"d 被标记为volatile的,以确保编译器不会对任何读取此值的操作进行优化". 那位高人能否给详细解释一下?谢谢!
解决方案 »
- 新手NetBeans开发问题!
- 模的幂计算问题,为什么同样的算法用JAVA做就会越界?请教数论和JAVA高手
- 1个题目,谁能告诉我怎么做
- 求正则表达式到DFA的java实现,急
- mysql的字段类型?
- 怎么AppletContext的showDocument()方法没有结果
- 怎样在java程序中获得环境变量,如classpth,TOMCAT_HOME等的值?
- 请问如何安装jsse?谢谢
- 求数据结构Java版视频教程
- 论坛的各位大神们,想问一下请问这段代码最终得出的getKey()的值是什么
- 看似简单的问题 String s=new String("xyz")共创建了几个对象?
- Java怎样查看系统物理内存大小?还有可用内存
我们知道,在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
等待一下其他人的参与,然后就结帖,给分! :-)