16. Java的 Unsafe 类方法介绍

1. 前言

本节内容主要是对 Unsafe 类方法进行介绍,JDK jar 包中的 Unsafe 类提供了硬件级别的原子性操作,Unsafe 类中的方法都是 native 方法,它们使用 JNI 的方式访问本地 C++实现库。

本节我们来了解一下 Unsafe 提供的几个主要的方法进行介绍。为我们后续对 Unsafe 方法的使用奠定良好的基础。

2. 方法介绍

方法作用
objectFieldOffset(Field)返回指定的变量在所属类中的内存偏移地址,该偏移地址仅仅在该 UnSafe 函数中访问指定字段时使用。
arrayBaseOffset(Class)获取取数组中第一个元系的地址。
arrayIndexScale(Class)获取数组中一个元素占用的字节。
compareAndSwapLong(Object,long,long,long)比较对象 obj 中偏移量为 offset 的变量的值是否与 expect 相等,相等则使用 update 值更新,然后返回 true,否则返回 false。
longgetLongvolatile(Object,long)获取对象 obj 中偏移量为 offset 的变量对应 volatile 语义的值。
void putLongvolatile(Object,long,long)设置 obj 对象中 offset 偏移的类型为 long 的 field 的值为 value, 支持 volatile 语义。
putOrderedLong(Object,long,long)设置 obj 对象中 offset 偏移地址对应的 long 型 field 的值为 value。这是一个有延迟的 putLongvolatile 方法,并且不保证值修改对其他线程立刻可见。只有在变量使用 volatile 修饰并且预计会被意外修改时才使用该方法。
unpark(Object)唤醒调用 park 后阻塞的线程。

3. park 方法介绍

方法描述 void park(booleanisAbsolute,longtime):阻塞当前线程,其中参数 isAbsolute 等于 false 且 time 等于 0 表示一直阻塞。

方法解读:time 大于 0 表示等待指定的 time 后阻塞线程会被唤醒,这个 time 是个相对值,是个增量值,也就是相对当前时间累加 time 后当前线程就会被唤醒。如果 isAbsolute 等于 true,并且 time 大于 0,则表示阻塞的线程到指定的时间点后会被唤醒。

这里 time 是个绝对时间,是将某个时间点换算为 ms 后的值。另外,当其他线程调用了当前阻塞线程的 interrupt 方法而中断了当前线程时,当前线程也会返回,而当其他线程调用了 unPark 方法并且把当前线程作为参数时当前线程也会返回。

4. JDK8 新增的函数

方法作用
getAndSetLong(Object, long, long)获取对象 obj 中偏移量为 offset 的变量 volaile 语义的当前值,并设置变量 volaile 语义的值为 update。
getAndAddLong(Object,long,long)方法获取 object 中偏移量为 offset 的 volatile 变量的当前值,并设置变量值为原始值加上 addValue

5. 小结

本节的核心内容即 Usafe 方法的了解,为下边讲解 Unsafe 方法的使用奠定一个良好的基础。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

当《开心消消乐》遇上 AI 推理,我们找到了高质量关卡背后的原因!

随着 AI 热潮席卷各行各业,其落地应用已经成为企业技术研发升级的工作重心。人工智能应用的升级不仅需要软件层面的升级迭代,还需要大规模基础设施的支撑。然而,自行搭建大规模算力、存储基础设施对于大多数企业而言都存在技术难度、人力资源…

OBD诊断(ISO15031) 04服务

文章目录 功能简介ISO 9141-2、ISO 14230-4和SAE J1850的诊断服务定义1、清除/重置与排放相关的诊断信息请求消息定义2、请求与排放相关的DTC响应消息定义3、报文示例 ISO 15765-4的诊断服务定义1、请求与排放相关的DTC请求消息定义2、请求与排放相关的DTC响应消息定义3、否定响…

网络基础:OSPF 协议

OSPF(Open Shortest Path First)是一种广泛使用的链路状态路由协议,用于IP网络中的内部网关协议(IGP)。OSPF通过在网络中的所有路由器之间交换路由信息,选择从源到目的地的最优路径。OSPF工作在OSI模型的第…

Python处理excel数据详解

1.导入文件 注意:要把excel放到跟你的python文件在同一个地方 import pandas as pd import numpy as np dfpd.read_excel("鸢尾花训练数据.xlsx",engine"openpyxl") import pandas 先引入 (若没有下载 需要在终端下载 pip install pandas)…

【C语言】enum 关键字

在C语言中,enum关键字用于定义枚举类型。枚举是一种用户自定义的数据类型,由一组命名的整型常量构成。使用枚举可以提高代码的可读性和可维护性,特别是在表示一组相关的常量时。 定义和使用枚举类型 基本定义 要定义一个枚举类型&#xff…

机器人控制系列教程之Delta机器人轨迹规划

并联机器人轨迹规划原理 轨迹规划:并联机器人的轨迹规划相比于串联机器人更加严苛,因为在大多数工作场合都有高速、高精度、轻载的特征。其一般运动轨迹为 Point-To-Point,对这始末两点的轨迹规划在 Delta 机器人乃至所有机器人领域具有重要…

01 数据采集层 流量分发第一步规范采集海量数据

《易经》:“初九:潜龙勿用”。潜龙的意思是隐藏,阳气潜藏,阳爻位于最下方称为“初九”,龙潜于渊,是学而未成的阶段,此时需要打好基础。 而模块一我们就是讲解推荐系统有关的概念、基础数据体系…

2024年7月2日 (周二) 叶子游戏新闻

老板键工具来唤去: 它可以为常用程序自定义快捷键,实现一键唤起、一键隐藏的 Windows 工具,并且支持窗口动态绑定快捷键(无需设置自动实现)。 卸载工具 HiBitUninstaller: Windows上的软件卸载工具 经典名作30周年新篇《恐怖惊魂夜…

VirtualBox Ubuntu Sever配置双网卡

Ubuntu 版本:Ubuntu Server 2404 vitrualBox 网卡配置: 如上配置后,ifconfig 只能看到 网卡1 应用了。要应用 网卡2 需要更改文件 /etc/netplan/50-cloud-init.yaml(不同的ubuntu版本这个文件名可能不同) 首先 ifcon…

《昇思25天学习打卡营第7天|函数式自动微分》

文章目录 今日所学:一、函数与计算图二、微分函数与梯度计算三、Stop Gradient四、Auxiliary data五、神经网络梯度计算总结 今日所学: 今天我学习了神经网络训练的核心原理,主要是反向传播算法。这个过程包括将模型预测值(logit…

PyCharm远程开发配置(2024以下版本)

目录 PyCharm远程开发配置 1、清理远程环境 1.1 点击Setting 1.2 进入Interpreter 1.3 删除远程环境 1.4 删除SSH 2、连接远程环境 2.1 点击Close Project 2.2 点击New Project 2.3 项目路径设置 2.4 SSH配置 2.5 选择python3解释器在远程环境的位置 2.6 配置远程…

EXCEL返回未使用数组元素(未使用值)

功能简介: 在我们工作中,需要在EXCEL表列出哪些元素(物品或订单)已经被使用了(或使用了多少次),哪些没有被使用。 当数量过于庞大时人工筛选或许不是好办法,我们可以借助公式&…

鸿蒙数据防泄漏(DLP)【Data Loss Prevention Kit简介】

Data Loss Prevention Kit简介 Data Loss Prevention Kit(数据防泄漏服务,简称为DLP),是系统提供的系统级的数据防泄漏解决方案,提供文件权限管理、加密存储、授权访问等能力,数据所有者可以基于帐号认证对…

Python基础小知识问答系列-可迭代型变量赋值

1. 问题: 怎样简洁的把列表中的元素赋值给单个变量? 当需要列表中指定几个值时,剩余的变量都收集在一起,该怎么进行变量赋值? 当只需要列表中指定某几个值,其他值都忽略时,该怎么…

【数据分享】《中国金融年鉴》1986-2020年PDF版

而今天要免费分享的数据就是1986-2020年间出版的《中国金融年鉴》并以多格式提供免费下载。(无需分享朋友圈即可获取) 数据介绍 《中国金融年鉴》自1986年起,逐年记录着中国金融领域的发展历程、政策变化和市场动态。这部年鉴不仅是金融专业…

PD虚拟机和VirtualBox有什么区别?Parallels Desktop 19.1.1 破解版

随着计算机技术的不断发展,虚拟机软件在现代信息技术领域中扮演着越来越重要的角色。虚拟机不仅可以帮助用户在一台物理机器上运行多个操作系统,还能有效隔离不同环境,提升系统安全性。在众多的虚拟机软件中,PD虚拟机(…

Halcon 基于分水岭的目标分割

一 分水岭 1 分水岭介绍 传统的分水岭分割方法,是一种基于拓扑理论的数学形态学的分割方法,其基本思想是把图像看作是地质学上的拓扑地貌,图像中每一像素的灰度值表示该点的海拔高度,每一个局部极小值及其周边区域称为集水盆地&…

Redis理解【精细】【快速上手】

目录 1. 了解3V和3高 2.什么是redis 3. redis可以做什么 4. Windows安装 5. 使用redis客户端操作redis 5.1 redis基本命令 5.1.1 切换数据库 5.1.2 查看当前数据库的大小 5.1.3 查看当前数据库所有的key ​​​​​​​ 5.1.4 清空当前数据库所有key 5.1.5 清空所…

操作系统真象还原:编写硬盘驱动程序

第13章-编写硬盘驱动程序 这是一个网站有所有小节的代码实现,同时也包含了Bochs等文件 13.1 硬盘及分区表 13.1.1 创建从盘及获取安装的磁盘数 要实现文件系统,必须先有个磁盘介质,虽然咱们己经有个虚拟磁盘 hd60M.img,但它只…

党建科普3D数字化展馆支持实时更新迭代

3D虚拟策展逐渐成为新时代下的主流方式,深圳华锐视点作为专业的web3d开发公司,具有专业化的3D数字化空间还原能力,能根据企业/个人不同需求和预算,为您打造纯线上虚拟3D艺术展,让您彻底摆脱实体美术馆的限制&#xff0…