ThreadLocalT
图解:
说明:在我们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相关推荐
- NET问答: ThreadStatic 和 ThreadLocalT 哪一个更好 ?
咨询区 user2341923: [ThreadStatic] 被设计成特性, ThreadLocal<T> 被设计成泛型,为什么会有这两种设计方案呢 ?谁能告诉我他们的优缺点各是什么?是 ...
- 深入浅出ThreadLocal,你会吗?
ThreadLocal全面解析 学习目标 了解ThreadLocal的介绍 掌握ThreadLocal的运用场景 了解ThreadLocal的内部结构 了解ThreadLocal的核心方法源码 了解T ...
- 线程的局部变量ThreadLocal概念
ThreadLocal是什么 对这个词语分解,将其分为Thread和Local,顾名思义便是本线程的变量,既然是当前线程的变量,那么就意味着这个变量对于其他线程来说就是隔离的,也就是不可见的,Thre ...
- 由浅入深,全面解析ThreadLocal
文章目录 ThreadLocal全面解析 1. ThreadLocal介绍 1.1 官方介绍 1.2 基本使用 1.2.1 常用方法 1.2.2 使用案例 1.3 ThreadLocal类与synch ...
- 全面解析ThreadLocal
文章目录 1.ThreadLocal概述 基本使用 常用方法 代码演示 2.ThreadLocal的内部结构 原理探究 3.ThreadLocal的核心方法源码 set方法 get方法 remove方 ...
- ThreadLocal深析
文章目录 1. ThreadLocal的内部结构: 1.1 常见误解: 1.2 核心结构: 1.3 这样设计的好处: 2. ThreadLocal的核心方法源码: 2.1 get方法: 2.2 set ...
- Java并发编程知识大汇总
线程简介 什么是线程 现代操作系统调度的最小单元是线程,也叫轻量级进程,在一个进程里可以创建很多是线程,这些线程都有自己的计数器,堆栈和局部变量等属性,并且能够访问共享的内存变量. 之所以我们感觉不到 ...
- JUC----ThreadLocal
目录 一.什么是ThreadLocal 二.ThreadLocal常用API 三.ThreadLocal的内部结构 四.ThreadLocal内存泄漏问题 一.什么是ThreadLocal Threa ...
- ThreadLocal全面解析
ThreadLocal全面解析 注:本学习资料来自黑马程序员 学习目标 了解ThreadLocal的介绍 掌握ThreadLocal的运用场景 了解ThreadLocal的内部结构 了解ThreadL ...
最新文章
- python.freelycode.com-Python数据可视化2018:为什么这么多的库?
- 软件和硬件的关系以及软件调动硬件的工作原理
- OS_CORE.C(6)
- 所谓语音合成 是计算机根据语言学,计算语言学完整1
- C语言循环设计结构,c语言---循环结构设计.ppt
- office 2010安装包
- 【推荐算法】协同过滤算法介绍
- 笔记:PJL的一些用法
- Java时间 之 Instant
- 虚拟机2008安装DHPC服务器,Windows Server 2008 配置DHCP服务器
- mysql忘记密码win10_win10 mysql8.0.12 忘记root密码如何重置密码
- [zt] dmt、lmt、mssm, assm (SEGMENT SPACE MANAGEMENT AUTO) 的一点总结
- librosa重采样和声道设置
- 数据库管理系统有哪些
- 【HTML/CSS】弹性盒子 flex布局制作一个动画卡片
- 还不明白什么是固件吗
- 黑马程序员C++职工管理系统
- oracle 和mysql语法上的区别,Mysql和Oracle的一些语法区别
- JS读取Excel时日期格式错误
- java PKCS12 证书生成
热门文章
- python eval()函数用法以及可能出现的问题
- UDP socket编程中使用connect
- PIC中的#pragma idata 和#pragma udata
- C语言再学习 -- 标识符
- linux获取java环境变量的值,linux获取java环境变量的值
- java 颜色比较_我该如何比较Java中的颜色?
- Android 开发, Android 安全 精品资料收集 (持续更新...)
- IPFS: BitSwap协议(数据块交换)
- 关于“WireX Botnet”事件Android样本分析报告
- redhat6搭建ftp