ThreadLocal源码解析】的更多相关文章

Java 中的 ThreadLocal是线程内的局部变量, 它为每个线程保存变量的一个副本.ThreadLocal 对象可以在多个线程中共享, 但每个线程只能读写其中自己的副本. 目录: 代码示例 源码解析 InheritableThreadLocal ThreadLocalMap Get 流程 Set 流程 Remove 代码示例 我们编写一个简单的示例: import java.util.Random; import java.util.concurrent.ExecutorService;…
主要用途 1)设计线程安全的类 2)存储无需共享的线程信息 设计思路 ThreadLocalMap原理 1)对象存储位置-->当前线程的ThreadLocalMap ThreadLocalMap是在ThreadLocal中定义的静态内部类,用于存放线程的信息,以ThreadLocal或InheritableThreadLocal为key,对象为value.每个Thread都有两个ThreadLocalMap,如下 /* ThreadLocal values pertaining to this…
上网查看了很多篇ThreadLocal的原理的博客,上来都是文字一大堆,费劲看了半天,大脑中也没有一个模型,想着要是能够有一张图明确表示出来ThreadLocal的设计该多好,所以就自己看了源码,画了一张图出来,立刻清晰不少. 根据源码代码理清ThreadLocal结构 public T get() { Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); if (map != null) { ThreadLocal…
目录 一.ThreadLocal介绍 1.1 ThreadLocal的功能 1.2 ThreadLocal使用示例 二.源码分析-ThreadLocal 2.1 ThreadLocal的类层级关系 2.2 ThreadLocal的属性字段 2.3 创建ThreadLocal对象 2.4 ThreadLocal-set操作 2.5 ThreadLocal-get操作 2.6 ThreadLocal-remove操作 三.ThreadLocalMap类 3.0 线性探测算法解决hash冲突 3.1…
今天来看一下Thread和ThreadLocal类的源码. 一.Thread (1)首先看一下线程的构造方法,之后会说每种参数的用法,而所有的构造函数都会指向init方法 //空构造创建一个线程 Thread() //传入Runnable对象创建一个线程 Thread(Runnable target) //传入Runnable对象和线程名创建一个线程 Thread(Runnable target, String name) //传入线程名创建一个线程 Thread(String name) //…
我想ThreadLocal这东西,大家或多或少都了解过一点,我在接触ThreadLocal的时候,觉得这东西很神奇,在网上看了很多博客,也看了一些书,总觉得有一个坎跨不过去,所以对ThreadLocal一直是一知半解的,好在这东西在实际开发中毕竟用的不多,所以也就得过且过了.当然我说的"用的不多",只是对于普通的上层业务开发而言,其实在很多框架中,都用到了ThreadLocal,甚至有的还对ThreadLocal做了进一步的改进.但是ThreadLocal也算是并发编程的基础,所以还真…
GitHub Page: http://blog.cloudli.top/posts/Java-ThreadLocal-的使用与源码解析/ ThreadLocal 主要解决的是每个线程绑定自己的值,可以将 ThreadLocal 看成全局存放数据的盒子,盒子中存储每个线程的私有数据. 验证线程变量的隔离性 import static java.lang.System.out; public class Run { private static ThreadLocal<Integer> thre…
1.原理图说明 首先看这一张图,我们可以看出,每一个Thread类中都存在一个属性 ThreadLocalMap 成员,该成员是一个map数据结构,map中是一个Entry的数组,存在entry实体,该实体包含了 key value hash (注意 此map结构不包含next引用 所以不是使用的链地址方法). 可以是用来存放 ThreadLocal对象以及对应的变量副本: 根据这个原理.我们可以知道在一个线程中可以存储多个 ThreadLocal 对象以及对应的value副本: 所以Threa…
今天听到一个老哥说道ThreadLocal在源码设计上面的一些好处,于是决定把ThreadLocal源码彻底分析一下. 首先,我们来看下set方法 可以看到,这个方法里,先获得了当前线程,之后将当前线程传入了一个方法 此处返回了当前线程的一个成员变量 此时我们第一次调用,肯定为空,那么我们进入为空的判断看下方法 可以看到,new了一个ThreadLocalMap并将当前的ThreadLocal对象作为键,我们要存入的值作为值传入 来看下这个ThreadLocalMap到底为何物吧. 这就是它的庐…
EventBus源码阅读记录 repo地址: greenrobot/EventBus EventBus的构造 双重加锁的单例. static volatile EventBus defaultInstance; public static EventBus getDefault() { if (defaultInstance == null) { synchronized (EventBus.class) { if (defaultInstance == null) { defaultInsta…