网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 软件工程 > 后端开发 > Java >

6、(InputStream的源码、FilterInputStream源码、Buffe

时间:2026-02-13 23:42

人气:

作者:admin

标签:

导读:一、AtomicReferenceFieldUpdater的用法 AtomicReferenceFieldUpdater是一个抽象的工具类,其底层是通过反射找到目标字段的内存偏移量,然后利用Unsafe.class提供的CAS(Compare-And-Swap)操作来原子地更新...

一、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();
   }
}

以上代码执行结果如下:
clipboard

二、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]);
      }
   }
}

以上代码执行结果如下:
clipboard

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信