Java理论与实践: 修复Java内存模型,第1部分 - 编程入门网
!initialized)
sleep();
// use configOptions
这里的思想是使用易失性变量 initialized 担任守卫来表明一套别的操作已 经完成了。这是一个很好的思想,但是它不能在旧的 JMM 下工作,因为旧的 JMM 允许非易失性的写(比如写到 configOptions 字段,以及写到由 configOptions 引用 Map 的字段中)与易失性的写一起重新排序,因此另一个 线程可能会看到 initialized 为 true,但是对于 configOptions 字段或它所 引用的对象还没有一个一致的或者说当前的视图。 volatile 的旧语义只承诺正 在读和写的变量的可见性,而不承诺其他的变量。虽然这种方法更容易有效地实 现,但结果是没有原来所想的那么有用。 结束语 正如 Java Language Specification 第 17 章中所指定的,JMM 有一些严重 的缺点,即允许一些看起来合理的程序发生一些非直观的或不合需要的事情。如 果正确地编写并发的类太困难的话,那么我们可以说许多并发的类不能按预期工 作,并且这是平台中的一个缺点。幸运的是,我们可以在不破坏在旧的内存模型 下正确同步的任何代码的同时,创建一个与大多数开发者的直觉更加一致的内存 模型,并且这一切已经由 JSR 133 process 完成。下个月,我们将介绍新的内 存模型(它的大部分功能已集成到 1.4 JDK 中)的详细信息。 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |