当前位置: 首页 > news >正文

(InputStream的源码、FilterInputStream源码、BufferedInputStream的源码解读前言)AtomicReferenceFieldUpdater.class和Sys

AtomicReferenceFieldUpdater的用法

AtomicReferenceFieldUpdater是一个抽象的工具类,其底层是通过反射找到目标字段的内存偏移量,然后利用Unsafe.class提供的CAS(Compare-And-Swap)操作来原子地更新某个类中指定变量的值。如下所示:

package com.xxx.StreamAndReader; import java.io.IOException; import java.util.concurrent.atomic.AtomicReferenceFieldUpdater; public class TestAtomicReferenceFieldUpdater { protected volatile byte buf[]; public TestAtomicReferenceFieldUpdater() { this.buf = new byte[8]; } private static final AtomicReferenceFieldUpdater<TestAtomicReferenceFieldUpdater, byte[]> bufUpdater = AtomicReferenceFieldUpdater.newUpdater (TestAtomicReferenceFieldUpdater.class, byte[].class, "buf"); private void method() throws IOException { byte[] buffer = buf; System.out.println("执行AtomicReferenceFieldUpdater.class::compareAndSet()函数前buf的长度:" + buffer.length); int nsz = buffer.length * 2; byte nbuf[] = new byte[nsz]; bufUpdater.compareAndSet(this, buffer, nbuf); buffer = buf; System.out.println("执行AtomicReferenceFieldUpdater.class::compareAndSet()函数后buf的长度:" + buffer.length); } public static void main(String[] args) throws IOException { TestAtomicReferenceFieldUpdater object = new TestAtomicReferenceFieldUpdater(); object.method(); } }

以上代码执行结果如下:

二、System.arraycopy的用法

该函数共有5个入参,分别如下:
①、Object src:源数组;
②、int srcPos:源数组的起始索引位置;
③、Object dest:目标数组;
④、int destPos:目标数组的起始索引位置;
⑤、int length:需要从源数组中复制的元素个数;
该函数的执行过程如下:
将源数组中srcPos索引位置~ (srcPos + length - 1)索引位置的元素复制到目标数组的destPos 索引位置~(destPos + length - 1)的索引位置,如果源数组和目标数组是同一个数组对象,则复制操作会先将srcPos索引位置~ (srcPos + length - 1)索引位置的元素复制到一个长度为 length的临时数组中,然后再将临时数组的内容复制到该数组(同一个数组)的destPos 索引位置~(destPos + length - 1)的索引位置。如下所示:

package com.xxx.StreamAndReader; public class TestSystemArrayCopy { public static void main(String[] args) { int[] src = new int[10]; for (int i = 1; i < 11; i++) { src[i-1] = i; } int[] dest = new int[10]; System.arraycopy(src, 0, dest, 5, 5); for (int i = 0; i < dest.length; i++) { System.out.println("dest数组的第"+i+"个索引位置的元素是:"+dest[i]); } } }

以上代码执行结果如下:

http://www.gsyq.cn/news/1605103.html

相关文章:

  • ingress-nginx
  • FanControl终极指南:如何在Windows上实现智能风扇控制,告别噪音烦恼
  • 在线教程丨32K上下文一次解析数十页文档,百度开源Unlimited OCR,重构长文档复杂场景
  • LPDDR5 ZQ校准实战:从背景校准到命令模式的深度解析
  • 从DCB到OSB:北斗多频多系统硬件延迟改正的演进与实践
  • 更新int count变量,fill()函数中getInIfOpen().read(buffer, pos, buffer.length - pos)这行代码的返回值为8192,
  • D3KeyHelper终极指南:暗黑3智能游戏自动化与按键管理解决方案
  • 量子LDPC码波束搜索解码器:原理、优化与应用
  • BGP路由反射器实战:从反射簇设计到防环机制的部署与验证
  • 考验AI的“自我“-AI对《红楼梦》后40回的改写(29)
  • OV SSL证书一年费用多少?单域名、多域名和通配符价格怎么选
  • 信号链路——从采样电阻到电流数值
  • 从调试失败到上线交付:一位资深架构师的ChatGPT API Python集成手记(含企业级重试/降级/监控完整链路)
  • 口碑好的抗衰项目直销厂商
  • MSPM0 H-Series I2C模块深度解析:从控制器/目标模式到低功耗与DMA优化
  • 无法强制安装 pyinstaller-hooks-contrib
  • TAS5711数字音频放大器:从I2S到PWM的完整开发指南
  • Agent编排的核心挑战指令与内容分离剪贴板法则的实践与思考
  • 实战ModSecurity WAF:从DVWA靶场到自定义SQL注入防御规则
  • go 数字人Coze智能体
  • 卡梅德生物技术快报|羊驼纳米抗体文库筛选实操全流程:天然 / 合成文库构建与淘选参数汇总
  • AI数字人平台热门十三问|必火AI数字人全维度专业解答
  • 如何高效优化电子书阅读体验:Kindle Comic Converter的完整漫画转换方案
  • 从 0 开始学 Python:装好环境,写一下demo实例
  • GPU硬件故障排查终极指南:5分钟完成显卡内存稳定性检测
  • 收藏!小白程序员必看:如何将大模型Agent从Demo成功落地工程实践?
  • Lean 4实战指南:5个步骤掌握下一代定理证明编程语言
  • Vibe Coding:说人话就能做软件,超简单开发流程全讲明白
  • XSS防御实战:从同源策略到CSP的纵深安全体系构建
  • Kafka2.4-Windows安装教程