Java内存模型之原子性

文章目录

  • 1.什么是原子性
  • 2.Java中的原子操作有哪些
  • 3.long和double的原子性
  • 4.原子操作 + 原子操作 != 原子操作

1.什么是原子性

一系列的操作,要么全部执行成功,要么全部不执行,不会出现执行一半的情况,是不可分割的。

注意:i++ 不是原子性的,可以用 synchronized 实现原子性。

在这里插入图片描述

2.Java中的原子操作有哪些

除 long 和 double 之外的基本类型(int, byte, boolean, short, char, float)的赋值操作。

所有引用(reference)的赋值操作,不管是 32 位的机器还是 64 位的机器。

java.concurrent.Atomic.* 包中所有类的原子操作。

3.long和double的原子性

下面截图内容来自官方文档:https://docs.oracle.com/javase/specs/jls/se21/html/jls-17.html#jls-17.7

在这里插入图片描述

官方文档总结:long 和 double 是 64 位的值。出于Java编程语言内存模型的目的,对 non-volatile 的 long 或 double 值的单次写入被视为两次单独的写入:每次写入一半,即每次写入 32 位。这可能会导致线程从一次写入中看到 64 位值的前 32 位,而从另一次写入中看到后 32 位。可以使用 volatile 关键字解决该问题。

在 32 位的JVM上,long 和 double 的操作不是原子的,但是在 64 位的JVM上是原子的。

在实际开发中,商用Java虚拟机早就考虑到这一点了,会避免这种问题的发生,自动保证 long 和 double 写入时的原子性。对我们而言,不必担心 long 和 double 在 32 位机器上写入时的原子问题。

4.原子操作 + 原子操作 != 原子操作

简单地把原子操作组合在一起,并不能保证整体依然具有原子性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/343616.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Bug:Goland左侧丢失项目结构(Goland常用快捷键)

Goland快捷键&小tips 1 常用快捷键 # 格式化代码 optioncommandL# 在项目中搜索文件中的内容 commandshiftF# 搜索.go文件 shiftshift(按两次shift)# 修改方法、变量(同时替换引用处的名称) fnshiftF6# 将选中代码抽取为方法…

内存卡为什么会提示格式化,内存卡提示格式化还能恢复吗

对于许多电脑用户来说,执行内存卡格式化操作导致数据丢失是一个常见的问题。在日常生活中,数据丢失的情况并不少见,但内存卡格式化后的数据恢复相对较难。目前,能够使用的方法较少,且成功率较低,但并不是没…

基于SpringBoot+Thymeleaf的医院挂号管理系统(有文档、Java毕业设计)

大家好,我是DeBug,很高兴你能来阅读!作为一名热爱编程的程序员,我希望通过这些教学笔记与大家分享我的编程经验和知识。在这里,我将会结合实际项目经验,分享编程技巧、最佳实践以及解决问题的方法。无论你是…

C++基础算法之枚举

星光不问赶路人 岁月不负有心人 🎥烟雨长虹,孤鹜齐飞的个人主页 🔥个人专栏 期待小伙伴们的支持与关注!!! 目录 枚举算法的简介 枚举算法的运用 #特别数的和 题目描述# 输入描述# 输入输出样例# #找到最多…

团结引擎的安装

团结引擎有多种方式可以安装,具体可以参考团结引擎官方文档,这里我们使用最简单的安装方式,通过团结Hub来安装。 1. 安装 Tuanjie Hub 进入团结引擎官网,点击右上角的【下载Unity】,进入下载界面,选择“下载…

QT上位机开发(利用tcp/ip访问plc)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 plc是工控领域很重要的一个器件。简单的plc一般就是对io进行控制,但是复杂的plc,还可以控制电机、变频器,在工业…

一种具有轨迹优化的无人驾驶车实时运动规划器 论文阅读

论文题目:A Real-Time Motion Planner with Trajectory Optimization for Autonomous Vehicles Abstract 本文的实时规划器首先将空间离散化,然后基于一组成本函数搜索出最佳轨迹。迭代优化所得到的轨迹的Path和Speed。post-optimization计算复杂度低&…

vivado编译设置、执行设置、bit流生成设置

合成设置 使用“合成设置”可以指定约束集、合成策略、合成选项,以及要生成的报告。选项由选定的定义综合策略或综合报告策略,但您可以用自己的策略覆盖这些策略设置。您可以选择一个选项来查看对话框底部的描述。了解更多有关“合成设置”的信息&#…

《GreenPlum系列》GreenPlum初级教程-03GreenPlum系统管理

文章目录 第三章 GreenPlum系统管理1.关于GreenPlum数据库发布版本号2.启动和停止GreenPlum数据库2.1 启动数据库2.2 重启数据库2.3 仅重新载入配置文件更改2.4 停止GreenPlum数据库2.5 停止客户端进程 3.GreenPlum数据库状态查询4.访问GreenPlum数据库4.1 数据库会话参数4.2 支…

MFC结合GDI+

MFC结合GDI 创建一个空的MFC界面,在确定按钮函数里进行画图: 1、包含头文件与库 在stdafx.h中加入以下三行代码: #include "gdiplus.h" using namespace Gdiplus; #pragma comment(lib, "gdiplus.lib")2、安装GDI 在…

内 存 取 证

1.用户密码 从内存中获取到用户admin的密码并且破解密码,以Flag{admin,password}形式提交(密码为6位); 1)查看帮助 -h ./volatility_2.6_lin64_standalone -h 2)获取内存镜像文件的信息 imageinfo ./volatility_2.6_lin64_stand…

一阶低通滤波器

一阶低通滤波器 X为输入,Y为滤波后得到的输出值;本次的输出结果主要取决于上次的滤波输出值,其中a是和滤波效果有关的一个参数,称为滤波系数;它决定新采样值在本次滤波结果中所占的权重; 滤波系数a越小&a…