前言
虽然Java对多线程的支持比较友好,但是,能不加锁还是不要加锁吧。
ThreadLocal就是一种不加锁就能避免锁竞争的实现。
ThreadLocal与线程在JVM中的关系
ThreadLocal结构分析
根据图中的信息,再结合一下代码
Student student = new Student();
ThreadLocal<Student> localStudent = new ThreadLocal<>();
localStudent.set(student);
可以看出:
1. threadLocal的引用存在stack上, 并在堆中持有一个threadLocal对象实例
2. thread的引用存在stack上,并在堆中持有一个current thread对象实例,current thread对象持有一个threadLocalMap的属性
3. threadLocalMap拥有一个Entry数组,该entry中存放了多个entry实例,而entry实例的key和value分别为threadLocal的weak reference,thr