Android 线程本地变量<二> ThreadLocal Values源码解析

本文详细探讨了Android中ThreadLocal的静态内部类Values的实现,包括其数据存储结构、成员变量、构造方法以及关键操作如put、cleanUp、rehash和remove等。通过分析,揭示了Values如何管理线程变量并进行内存优化。
摘要由CSDN通过智能技术生成

Android 线程本地变量<二> ThreadLocal Values源码解析

@(Android系统源码解析)[Android, ThreadLocal, Values]

声明:转载请注明出处,知识有限,如有错误,请多多交流指正!

注:基于Android 6.0(API 23)源码

ThreadLocal内部类Values是被设计用来保存线程的变量的一个类,它相当于一个容器,存储保存进来的变量

静态内部类Values类解析

1. Values的结构
Values

主要原理是Values将数据存储在数组table(Object[] table)中,那么键值对如何存放的呢?就是table被设计为下标为0,2,4…2n的位置存放key,而1,3,5…(2n +1 )的位置存放value。取数据的时候可以直接通过下标存取线程变量。

2. Values的内部实现
成员变量
- private static final Object TOMBSTONE = new Object(); // 表示被删除的实体标记,移除变量时它是把对应的key的位置赋值为TOMBSTONE
- private static final int INITIAL_SIZE = 16; //默认的初始化容量
- private Object[] table; //保存变量的地方,长度必须是2的n次方的值
- private int mask; //计算下标的掩码,它的值是table的长度-1
- private int size; //存放进来的实体的数量
- private inttombstones; //表示被删除的实体的数量
- private int maximumLoad; //阈值,用来判断是否需要进行rehash
- private int clean; //表示下一个要进行清理的位置点


Values的构造

  Values() {
           // 默认创建32个长度的容器table
            initializeTable(INITIAL_SIZE);
            this.size = 0;
            this.tombstones = 0;
  }

 private void initializeTable(int capacity) {
            // 通过capacity创建table容器 
            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值