原子性
来源:互联网 发布:咨询公司数据分析 编辑:程序博客网 时间:2024/04/29 08:16
当在一个表达式中使用一个non-long或者non-double型字段时,原子性可以确保你将获得这个字段的初始值或者某个线程对这个字段写入之后的值;但不会是两个或更多线程在同一时间对这个字段写入之后产生混乱的结果值(即原子性可以确保,获取到的结果值所对应的所有bit位,全部都是由单个线程写入的)。但是,如下面(译注:指可见性章节)将要看到的,原子性不能确保你获得的是任意线程写入之后的最新值。
在Java 中除了 long 和 double 之外的所有基本类型的读和赋值,都是原子性操作。而64位的long 和 double 变量由于会被JVM当作两个分离的32位来进行操作,所以不具有原子性,会产生字撕裂问题。但是当你定义long或double变量时,如果使用 volatile关键字,就会获到(简单的赋值与返回操作的)原子性
虽然java内存模型不保证non-volatile long 和 non-volatile double的原子性,当然它们在某些场合也具有原子性。(译注:non-volatile long在64位JVM,OS,CPU下具有原子性)
注意,在JSR-133之前的旧内存模型中,一个64位long/double型变量的读/写操作可以被拆分为两个32位读/写操作来执行。从JSR-133内存模型(JDK5)开始,仅仅只允许把一个64位long/double型变量的写操作分拆成两个32位的写操作来执行,任意的读操作在JSR-133中都必须具有原子性。
0 0
- 原子性
- 原子性
- 原子性
- 原子性
- 原子性
- 原子性
- 原子性
- 原子性
- 原子性与原子操作
- 原子性与非原子性操作
- 多线程:原子性与非原子性
- 什么是原子性,什么是原子性操作?
- 什么是原子性,什么是原子性操作
- 原子性操作atomic_t
- 原子性和可视性
- 原子性操作atomic_t
- java Atomic原子性
- oracle 事务原子性
- 2.React Native Flex布局介绍以及实践
- Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系
- 二重积分的性质草稿
- python中软件包安装
- jsp中request.getParameter和request.getAttribute之间的区别
- 原子性
- npm 常用命令
- 深入学习VMware vSphere---基础知识
- 与IPC机制相关的试题
- 10款Web程序员必备的CSS工具
- .Net程序员学用Oracle系列(16):访问数据库(ODP.NET)
- BZOJ 2788: [Poi2012]Festival
- 2017-02-18
- Codeforces457-D. CGCDSSQ