当前位置: 首页 > 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.jsqmd.com/news/1093144/

相关文章:

  • ingress-nginx
  • 实时更新策略
  • 格子达的在线预览上传的word论文很多bug,明明没有线的,却多出了线,强烈建议系统抓紧补足漏洞!!!
  • 小程序WIFI连接实战:跨平台兼容性处理与iOS跳转优化方案
  • Spring Boot 缓存注解执行逻辑
  • FanControl终极指南:如何在Windows上实现智能风扇控制,告别噪音烦恼
  • 用Rust给Python写一个高性能扩展模块(PyO3实战)
  • 终极指南:如何用Kafka-UI轻松管理Apache Kafka集群
  • 昇腾310B加持的算力矩阵:香橙派四款AI产品全面解析
  • 论文阅读笔记 | Thinking with Video: Video Generation as a Promising Multimodal Reasoning Paradigm
  • Spring 事务总踩坑?一文吃透事务管理 + 数据访问底层源码与生产最佳实践
  • 在线教程丨32K上下文一次解析数十页文档,百度开源Unlimited OCR,重构长文档复杂场景
  • TMS320F28379D中断系统:从外设到CPU的实战配置指南
  • LPDDR5 ZQ校准实战:从背景校准到命令模式的深度解析
  • RAG 上下文压缩利器 headroom:深度架构解析与本地实战指南
  • [Android] 只音-免费无损音乐神器-全网曲库随心下
  • 从DCB到OSB:北斗多频多系统硬件延迟改正的演进与实践
  • 从Demo到SaaS:ChatGPT聊天机器人商业化闭环设计(含用户身份鉴权、计费埋点、审计日志)
  • AI专著写作指南:利用AI工具,20万字专著快速撰写不是梦!
  • 晋商遗韵里的明清活化石
  • 更新int count变量,fill()函数中getInIfOpen().read(buffer, pos, buffer.length - pos)这行代码的返回值为8192,
  • D3KeyHelper终极指南:暗黑3智能游戏自动化与按键管理解决方案
  • BGP路由反射器实战:从反射簇设计到防环机制的部署与验证
  • 量子LDPC码波束搜索解码器:原理、优化与应用
  • 考验AI的“自我“-AI对《红楼梦》后40回的改写(29)
  • 内蒙古经销商线上获客怎么做?呼和浩特专业 GEO 获客 + 短视频推广服务商推荐
  • 官宣邀约|7 月慕尼黑上海电子展,中国星坤 × 云汉芯城联合亮相 N2-609,恭候莅临!
  • 面了几个程序员转AI Agent方向,真的崩溃…
  • OV SSL证书一年费用多少?单域名、多域名和通配符价格怎么选
  • HarmonyOS APP《画伴梦工厂》开发第10篇:相册选择与 PhotoViewPicker——从相册导入图片