图解:

说明:在我们Thread 的类里面,存在一个属性,这个属性是:ThreadLocal类实现的内部类(ThreadLocalMap),所以对于每一个线程来说,他都具有一个本地的map,保存属于自己的参数,

对于回收,ThreadLocalMap的实现使用了弱引用,

    static class Entry extends WeakReference<ThreadLocal<?>> {/** The value associated with this ThreadLocal. */Object value;Entry(ThreadLocal<?> k, Object v) {super(k);value = v;}}

  

另外注意使用规范:

    private static final ThreadLocal<List<Runnable>> RUNNABLES = new ThreadLocal<List<Runnable>>();private ExecutorService threadPool = Executors.newFixedThreadPool(20);@Overridepublic void execute(Runnable runnable) {List<Runnable> threadRunnables = RUNNABLES.get();if (threadRunnables == null) {threadRunnables = new ArrayList<Runnable>();RUNNABLES.set(threadRunnables);TransactionSynchronizationManager.registerSynchronization(this);}threadRunnables.add(runnable);}

  TheadLocal的添加,是通过用户自己先判断,get(),是否为null,如果为空,set一个new值

java.lang.ThreadLocal<T>实现

 public void set(T value) {  Thread t = Thread.currentThread();  ThreadLocalMap map = getMap(t);  if (map != null)  map.set(this, value);  else  createMap(t, value);  }

  

public T get() {  Thread t = Thread.currentThread();  ThreadLocalMap map = getMap(t);  if (map != null) {  ThreadLocalMap.Entry e = map.getEntry(this);  if (e != null)  return (T)e.value;  }  return setInitialValue();
}

  

 private T setInitialValue() {  T value = initialValue();  Thread t = Thread.currentThread();  ThreadLocalMap map = getMap(t);  if (map != null)  map.set(this, value);  else  createMap(t, value);  return value;  }

与java.lang.Thread  implements Runnable (){。。。}的关联

此类的变量中存在

ThreadLocal.ThreadLocalMap threadLocals = null;

转载于:https://www.cnblogs.com/sg9527/p/7692652.html

ThreadLocalT相关推荐

  1. NET问答: ThreadStatic 和 ThreadLocalT 哪一个更好 ?

    咨询区 user2341923: [ThreadStatic] 被设计成特性, ThreadLocal<T> 被设计成泛型,为什么会有这两种设计方案呢 ?谁能告诉我他们的优缺点各是什么?是 ...

  2. 深入浅出ThreadLocal,你会吗?

    ThreadLocal全面解析 学习目标 了解ThreadLocal的介绍 掌握ThreadLocal的运用场景 了解ThreadLocal的内部结构 了解ThreadLocal的核心方法源码 了解T ...

  3. 线程的局部变量ThreadLocal概念

    ThreadLocal是什么 对这个词语分解,将其分为Thread和Local,顾名思义便是本线程的变量,既然是当前线程的变量,那么就意味着这个变量对于其他线程来说就是隔离的,也就是不可见的,Thre ...

  4. 由浅入深,全面解析ThreadLocal

    文章目录 ThreadLocal全面解析 1. ThreadLocal介绍 1.1 官方介绍 1.2 基本使用 1.2.1 常用方法 1.2.2 使用案例 1.3 ThreadLocal类与synch ...

  5. 全面解析ThreadLocal

    文章目录 1.ThreadLocal概述 基本使用 常用方法 代码演示 2.ThreadLocal的内部结构 原理探究 3.ThreadLocal的核心方法源码 set方法 get方法 remove方 ...

  6. ThreadLocal深析

    文章目录 1. ThreadLocal的内部结构: 1.1 常见误解: 1.2 核心结构: 1.3 这样设计的好处: 2. ThreadLocal的核心方法源码: 2.1 get方法: 2.2 set ...

  7. Java并发编程知识大汇总

    线程简介 什么是线程 现代操作系统调度的最小单元是线程,也叫轻量级进程,在一个进程里可以创建很多是线程,这些线程都有自己的计数器,堆栈和局部变量等属性,并且能够访问共享的内存变量. 之所以我们感觉不到 ...

  8. JUC----ThreadLocal

    目录 一.什么是ThreadLocal 二.ThreadLocal常用API 三.ThreadLocal的内部结构 四.ThreadLocal内存泄漏问题 一.什么是ThreadLocal Threa ...

  9. ThreadLocal全面解析

    ThreadLocal全面解析 注:本学习资料来自黑马程序员 学习目标 了解ThreadLocal的介绍 掌握ThreadLocal的运用场景 了解ThreadLocal的内部结构 了解ThreadL ...

最新文章

  1. python.freelycode.com-Python数据可视化2018:为什么这么多的库?
  2. 软件和硬件的关系以及软件调动硬件的工作原理
  3. OS_CORE.C(6)
  4. 所谓语音合成 是计算机根据语言学,计算语言学完整1
  5. C语言循环设计结构,c语言---循环结构设计.ppt
  6. office 2010安装包
  7. 【推荐算法】协同过滤算法介绍
  8. 笔记:PJL的一些用法
  9. Java时间 之 Instant
  10. 虚拟机2008安装DHPC服务器,Windows Server 2008 配置DHCP服务器
  11. mysql忘记密码win10_win10 mysql8.0.12 忘记root密码如何重置密码
  12. [zt] dmt、lmt、mssm, assm (SEGMENT SPACE MANAGEMENT AUTO) 的一点总结
  13. librosa重采样和声道设置
  14. 数据库管理系统有哪些
  15. 【HTML/CSS】弹性盒子 flex布局制作一个动画卡片
  16. 还不明白什么是固件吗
  17. 黑马程序员C++职工管理系统
  18. oracle 和mysql语法上的区别,Mysql和Oracle的一些语法区别
  19. JS读取Excel时日期格式错误
  20. java PKCS12 证书生成

热门文章

  1. python eval()函数用法以及可能出现的问题
  2. UDP socket编程中使用connect
  3. PIC中的#pragma idata 和#pragma udata
  4. C语言再学习 -- 标识符
  5. linux获取java环境变量的值,linux获取java环境变量的值
  6. java 颜色比较_我该如何比较Java中的颜色?
  7. Android 开发, Android 安全 精品资料收集 (持续更新...)
  8. IPFS: BitSwap协议(数据块交换)
  9. 关于“WireX Botnet”事件Android样本分析报告
  10. redhat6搭建ftp