线程中需要特别注意的volatile
来源:互联网 发布:零售业大数据 编辑:程序博客网 时间:2024/04/28 12:52
关于volatile
我们知道,在Java中设置变量值的操作,除了long和double类型的变量外都是原子操作,也就是说,对于变量值的简单读写操作没有必要进行同步。这在JVM 1.2之前,Java的内存模型实现总是从主存读取变量,是不需要进行特别的注意的。而随着JVM的成熟和优化,现在在多线程环境下volatile关键字的使用变得非常重要。在当前的Java内存模型下,线程可以把变量保存在本地内存(比如机器的寄存器)中,而不是直接在主存中进行读写。这就可能造成一个线程在主存中修改了一个变量的值,而另外一个线程还继续使用它在寄存器中的变量值的拷贝,造成数据的不一致。要解决这个问题,只需要像在本程序中的这样,把该变量声明为volatile(不稳定的)即可,这就指示JVM,这个变量是不稳定的,每次使用它都到主存中进行读取。一般说来,多任务环境下各任务间共享的标志都应该加volatile修饰。
我们知道,在Java中设置变量值的操作,除了long和double类型的变量外都是原子操作,也就是说,对于变量值的简单读写操作没有必要进行同步。这在JVM 1.2之前,Java的内存模型实现总是从主存读取变量,是不需要进行特别的注意的。而随着JVM的成熟和优化,现在在多线程环境下volatile关键字的使用变得非常重要。在当前的Java内存模型下,线程可以把变量保存在本地内存(比如机器的寄存器)中,而不是直接在主存中进行读写。这就可能造成一个线程在主存中修改了一个变量的值,而另外一个线程还继续使用它在寄存器中的变量值的拷贝,造成数据的不一致。要解决这个问题,只需要像在本程序中的这样,把该变量声明为volatile(不稳定的)即可,这就指示JVM,这个变量是不稳定的,每次使用它都到主存中进行读取。一般说来,多任务环境下各任务间共享的标志都应该加volatile修饰。
- 线程中需要特别注意的volatile
- 生活中特别需要注意的一些小案例
- 文件输入输出流中需要特别注意的一点
- tuple(元组)中特别需要注意的两点
- java多态继承中需要特别注意的点
- Python安装中需要特别注意的一件事
- python的super缺陷,需要特别注意
- matplotlib安装(特别需要注意的地方)
- DevOps2-在Jenkins容器中访问Gitlab容器需要特别注意的地方
- 线程需要注意的概念
- WEB 安全方面需要特别注意的问题
- 支付宝接口需要特别注意的几点问题
- Symbian系统上C工程师需要特别注意的地方
- mysql数据库你需要特别注意的23个事项
- iOS开发需要特别注意的问题总结
- 安卓手机安全--目前需要特别注意的问题
- stl map 插入方式和特别需要注意的区别
- JPA性能调优会需要特别注意的2点
- 心理测试:看看你有多花心
- DataSet.AcceptChanges的问题
- 今天开始就没有学习任务了,所以打算用.NET写一个系统。
- “看看你有多花心”答案
- 心情风筝4之漂浮
- 线程中需要特别注意的volatile
- Getting started with the Eclipse and the swt
- frm類型窗口里增加速查cRecSelExtComboBox(包含其它相關列)
- 一片发人深思的文章,编程人员不得不看
- 利用JExcelApi来动态生成excel文档
- 访问控制系统的设计——Esoft-ACL
- 动态建立弹出式菜单技术及其应用示例
- Archaic style function
- 关于如何jar的一点总结 (转自:javaresearch yedongshu2001 原创)