【多线程】long和double的非原子性协定
long和double的非原子性协定
Java内存模型要求lock、unlock、read、load、assign、use、store、write这8个操作都具有原子性,但是对于64位的数据类型(double、long)定义了相对宽松的规定:允许虚拟机将没有被volatile修饰的64位数据的读写操作划分为两次的32位操作来进行,即允许虚拟机可以不保证64位数据类型的load、store、read和write操作的原子性。
非原子性协定可能导致的问题
如果有多个线程共享一个未申明为volatile的long或double类型的变量,并且同时对其进行读取和修改操作,就有可能会有线程读取到"半个变量"的数值或者是一半正确一半错误的失效数据。
在实际应用中的解决
因为上述可能造成的问题,势必在对long和double类型变量操作时要加上volatile关键字,实际上如下:
1、64位的java虚拟机不存在这个问题,可以操作64位的数据
2、目前商用JVM基本上都会将64位数据的操作作为原子操作实现
所以我们编写代码时一般不需要将long和double变量专门申明为volatile
【多线程】long和double的非原子性协定相关推荐
- volatile非原子性示例
volatile非原子性示例 学习了:<Java多线程编程核心技术>高洪岩 著 Page124 package com.stono.thread2.page124_2;public cla ...
- Java多线程:线程安全和非线程安全的集合对象
转载自 Java多线程:线程安全和非线程安全的集合对象 一.概念: 线程安全:就是当多线程访问时,采用了加锁的机制:即当一个线程访问该类的某个数据时,会对这个数据进行保护,其他线程不能对其访问,直到 ...
- 关于MFC下多线程,在线程中创建非模态对话框以及消息传递
2019独角兽企业重金招聘Python工程师标准>>> 关于MFC下多线程,在线程中创建非模态对话框以及消息传递 问题: 1.在子对话框中它的子对话框需要实现脱离父对话框的束缚.(因 ...
- java 原子long_java中long和double类型操作的非原子性探究
Java中的原子操作包括: 1)除long和double之外的基本类型的赋值操作 2)所有引用reference的赋值操作 3)java.concurrent.Atomic.* 包中所有类的一切操作. ...
- java i 非原子性_java i++ 非原子操作
java i++ 非原子操作 i++ 不是原子操作, 也就是说, 它不是单独一条指令, 而是 3 条指令: 1, 从内存中把 i 的值取出来放到 CPU 的寄存器中 2,CPU 寄存器的值 + 1 3 ...
- 并发编程之多线程基础-守护线程与非守护线程(四)
守护线程概念: 只要当前JVM实例中尚存在任何一个非守护线程没有结束, 守护线程就全部工作; 只有当最后一个非守护线程结 束时, 守护线程随着 JVM 一同结束工作. 守护线程最典型的应用就是 GC ...
- 多线程基础-守护线程与非守护线程
守护线程与非守护线程 1.线程分类: 2.程序线程: 3.主线程与非守护线程 4.主线程与守护线程 5.主线程.守护线程.非守护线程 6. java虚拟机是如何退出的? 1.线程分类: 守护线程 非守 ...
- Qt多线程间信号槽传递非QObject类型对象的参数
一.以前就发现过这个问题: 在Qt项目中,有时候为了让自己的类,可以重载操作符 '=','<<','>>'. 也有时候需要用一个类进行文件的读写,所以很多C++类还是要简单化的 ...
- Java内存模型、volatile、原子性、可见性、有序性、happens-before原则
目录 1.硬件的效率与一致性: 缓存一致性(Cache Coherence) 2.Java内存模型 2.1主内存与工作内存 2.2内存间的交互 2.3 volatile型变量的特殊规则 2.3.1 保 ...
最新文章
- rose 2003 7.0_安卓微信7.0.17正式版更新:十大新鲜功能~
- Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist的
- 插入数据到hive_Hive实现网站PV分析
- SpringBoot 精通系列-创建SpringBoot的入门项目
- 一个RSS阅读器的源码,不敢独享!
- 概率论 方差公式_概率论与数理统计课程教学、学习基本要求和教学建议
- ImportError: DLL load failed: 找不到指定的模块。Import tensorflow时
- Ubuntu 18.04安装codeblocks 17-12
- IAR基础教程之函数跳转
- 学习笔记 | Inverting Gradients--How easy is it to break privacy in federated learning
- hdu多校(三)1004 Tokitsukaze and Multiple(easydp)
- C# - 此应用无法在你的电脑上运行
- 抖音短视频实操:抖音热门视频的分类特点,如何选择视频内容(中)
- Mac如何共享wifi热点
- Polarion舍与得——主机厂与供应商的ASPICE博弈
- 国内如何打开 Coursera?(Mac系统)
- 计算机图形学:二维图形的几何变换(算法原理及代码实现)
- 解决电脑开机-EFI PXE 0 for IPv4(XX-XX-XX-XX-XX-XX) boot failed.问题
- 硬件设计——外围电路(电源电路)
- 9.17 hive高级语法01