ThreadLocal总结(jdk1.8源码)
- public void set(T value)
public void set(T value) {Thread t = Thread.currentThread();//取得线程t的ThreadLocalMap对象ThreadLocalMap map = getMap(t);if (map != null)map.set(this, value);elsecreateMap(t, value);}
ThreadLocal.ThreadLocalMap threadLocals = null; //Thread类中
ThreadLocalMap getMap(Thread t) { //ThreadLocal类内的方法return t.threadLocals;}
void createMap(Thread t, T firstValue) {t.threadLocals = new ThreadLocalMap(this, firstValue);}
private static final int INITIAL_CAPACITY = 16; //ThreadLocalMap中定义的
private final int threadLocalHashCode = nextHashCode(); //ThreadLocal中定义的
ThreadLocalMap(ThreadLocal<?> firstKey, Object firstValue) {table = new Entry[INITIAL_CAPACITY];int i = firstKey.threadLocalHashCode & (INITIAL_CAPACITY - 1);table[i] = new Entry(firstKey, firstValue);size = 1;setThreshold(INITIAL_CAPACITY);}
public T get() {Thread t = Thread.currentThread();ThreadLocalMap map = getMap(t);if (map != null) {ThreadLocalMap.Entry e = map.getEntry(this);if (e != null) {@SuppressWarnings("unchecked")T result = (T)e.value;return result;}}return setInitialValue();}
private Entry getEntry(ThreadLocal<?> key) {int i = key.threadLocalHashCode & (table.length - 1);Entry e = table[i];if (e != null && e.get() == key)return e;elsereturn getEntryAfterMiss(key, i, e);}
private T setInitialValue() {T value = initialValue();Thread t = Thread.currentThread();ThreadLocalMap map = getMap(t);if (map != null)map.set(this, value);elsecreateMap(t, value);return value;}
public void remove() {ThreadLocalMap m = getMap(Thread.currentThread());if (m != null)m.remove(this);}
转载于:https://www.cnblogs.com/coderlynn/p/8654473.html
ThreadLocal总结(jdk1.8源码)相关推荐
- 【JUC】JDK1.8源码分析之ArrayBlockingQueue(三)
一.前言 在完成Map下的并发集合后,现在来分析ArrayBlockingQueue,ArrayBlockingQueue可以用作一个阻塞型队列,支持多任务并发操作,有了之前看源码的积累,再看Arra ...
- 【集合框架】JDK1.8源码分析之HashMap(一)
转载自 [集合框架]JDK1.8源码分析之HashMap(一) 一.前言 在分析jdk1.8后的HashMap源码时,发现网上好多分析都是基于之前的jdk,而Java8的HashMap对之前做了较大 ...
- 【集合框架】JDK1.8源码分析HashSet LinkedHashSet(八)
一.前言 分析完了List的两个主要类之后,我们来分析Set接口下的类,HashSet和LinkedHashSet,其实,在分析完HashMap与LinkedHashMap之后,再来分析HashSet ...
- JDK1.8源码分析:可重入锁ReentrantLock和Condition的实现原理
synchronized的用法和实现原理 synchronized实现线程同步的用法和实现原理 不足 synchronized在线程同步的使用方面,优点是使用简单,可以自动加锁和解锁,但是也存在一些不 ...
- JDK1.1源码学习之官方文档与代码结构
浩哥带你学习JDK1.1源码--第2天 1. 阅读源码那点事 2. JDK 1.1.8源码结构 1. 阅读源码那点事 在上一篇的文章中,进入Java官网的档案袋里面,可以看到文档有两个下载链接:一个日 ...
- hashmap实现原理_Java中HashMap底层实现原理(JDK1.8)源码分析
在JDK1.6,JDK1.7中,HashMap采用位桶+链表实现,即使用链表处理冲突,同一hash值的链表都存储在一个链表里.但是当位于一个桶中的元素较多,即hash值相等的元素较多时,通过key值依 ...
- 基于JDK1.8---HashMap源码分析
基于JDK1.8-HashMap源码简要分析 HashMap继承关系 HashMap:根据键的 hashCode 值存储数据,大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不 ...
- JDK1.8源码(三)——java.lang.String 类
String 类也是java.lang 包下的一个类,算是日常编码中最常用的一个类了,那么本篇博客就来详细的介绍 String 类. 1.String 类的定义 public final class ...
- JDK1.8源码分析之HashMap(一) (转)
一.前言 在分析jdk1.8后的HashMap源码时,发现网上好多分析都是基于之前的jdk,而Java8的HashMap对之前做了较大的优化,其中最重要的一个优化就是桶中的元素不再唯一按照链表组合,也 ...
- Java面试绕不开的问题: Java中HashMap底层实现原理(JDK1.8)源码分析
这几天学习了HashMap的底层实现,但是发现好几个版本的,代码不一,而且看了Android包的HashMap和JDK中的HashMap的也不是一样,原来他们没有指定JDK版本,很多文章都是旧版本JD ...
最新文章
- 使用C#开发数据库应用系统
- 七十八、SpringBoot监听rabbitmq和创建交换器,队列
- Java NIO系列教程(四) Scatter/Gather
- 安装openJDK 8
- iOS开发实用技术之推送-应用间跳转-社交分享
- mysql里面手动关闭_MySQL 启动与关闭(手动与自动)
- 常见对象之String类
- 电信基础设施共建共享
- Python爬虫整站爬取安居客新房房源数据
- Kaptcha简单使用
- 用于空间搜索的四叉树
- Matlab中axis函数使用
- 东软始业教育2021(注意看得分88分)
- 算符优先分析java程序_算符优先分析
- JSF——JSF 标签
- RK3288 LED驱动编写
- 常见的硬件数据通信协议
- Python自动生成软著60页代码
- 自定义边框的制作与换色(canvas与css3)
- GIEC2022第九届全球互联网经济大会12月在京举办
热门文章
- 苹果 Mac 上不显示外置硬盘?9 个必须尝试的修复方法
- 如何使用键盘快捷键在Mac上录制屏幕?
- 性能优化篇 - Performance(工具 api)
- eNSP模拟器拓扑图:浮动路由的实际作用和分析,默认路由的配置,抓包分析
- 麻烦缠身的高通“向前看”:关注服务器市场和5G
- 大会直击|伯明翰大学教授姚新:类脑计算研究中三个被遗忘的问题
- Adb connect监听指定的主机和端口/Adb监听Visual Studio Emulator for Android模拟器
- 计算2的任意次方[通用版]
- 快速打开 Mac OS X 隐藏的用户资源库文件夹
- Eclipse 跌落“神坛”,这款 IDE 后来居上!