带你读《2022技术人的百宝黑皮书》——合理使用线程池以及线程变量(11)

简介: 带你读《2022技术人的百宝黑皮书》——合理使用线程池以及线程变量(11)

带你读《2022技术人的百宝黑皮书》——合理使用线程池以及线程变量(10)https://developer.aliyun.com/article/1340059?groupCode=taobaotech

image.pngthreadLocal.set()方法

 

/**
*Sets the current thread's copy of this thread-local variable
*to the specified value. Most subclasses will have no need to
*override this method, relying solely on the {@link #initialValue}
*method to set the values of thread-locals.
*
*@param value the value to be stored in the current thread's copy of
* this thread-local.
*/
public void set(T value) {
// 1. 获取当前线程
Thread t = Thread.currentThread();
// 2. 获取当前线程内部的ThreadLocalMap变量ThreadLocalMap map = getMap(t);
if (map != null)
// 3. 设 置 value map.set(this, value);
else
// 4. 若map为null则创建ThreadLocalMap createMap(t, value);
}

 

 

image.pngThreadLocalMap

从JDK源码可见,ThreadLocalMap中的Entry是弱引用类型的,这就意味着如果这个ThreadLocal只被这个 Entry引用,而没有被其他对象强引用时,就会在下一次GC的时候回收掉。

 

static class ThreadLocalMap {
/**
*The entries in this hash map extend WeakReference, using
*its main ref field as the key (which is always a
*ThreadLocal object). Note that null keys (i.e. entry.get()
* == null) mean that the key is no longer referenced, so the
*entry can be expunged from table. Such entries are referred to
*as "stale entries" in the code that follows.

 

 


image.pngthreadLocal.set()方法

 

 

 

10

 

*/

11

 

static class Entry extends WeakReference<ThreadLocal<?>> {

12

 

/** The value associated with this ThreadLocal. */

13

 

Object value;

14

 

 

15

 

Entry(ThreadLocal<?> k, Object v) {

16

 

super(k);

17

 

value = v;

18

 

}

19

 

}

20

 

 

21

 

// ...

22

}

 

 

 

带你读《2022技术人的百宝黑皮书》——合理使用线程池以及线程变量(12)https://developer.aliyun.com/article/1340057?groupCode=taobaotech

 

相关文章
|
2天前
|
存储 安全 Java
Java中的线程安全与同步技术
Java中的线程安全与同步技术
|
1天前
|
数据采集 Java Unix
10-多线程、多进程和线程池编程(2)
10-多线程、多进程和线程池编程
|
1天前
|
安全 Java 调度
10-多线程、多进程和线程池编程(1)
10-多线程、多进程和线程池编程
|
8天前
|
Java
【技术瑜伽师】Java 线程:修炼生命周期的平衡之道,达到多线程编程的最高境界!
【6月更文挑战第19天】Java多线程编程犹如瑜伽修行,从创建线程开始,如`new Thread(Runnable)`,到启动线程的活跃,用`start()`赋予生命。面对竞争与冲突,借助同步机制保证资源访问的有序,如`synchronized`关键字。线程可能阻塞等待,如同瑜伽的静止与耐心。完成任务后线程终止,整个过程需密切关注状态变换,以求多线程间的和谐与平衡。持续修炼,如同瑜伽般持之以恒,实现高效稳定的多线程程序。
|
8天前
|
Java 开发者
【技术成长日记】Java 线程的自我修养:从新手到大师的生命周期修炼手册!
【6月更文挑战第19天】Java线程之旅,从新手到大师的进阶之路:始于创建线程的懵懂,理解就绪与运行状态的成长,克服同步难题的进阶,至洞悉生命周期的精通。通过实例,展示线程的创建、运行与同步,展现技能的不断提升与升华。
|
8天前
|
Java
【技术解码】Java线程的五味人生:新建、就绪、运行、阻塞与死亡的哲学解读!
【6月更文挑战第19天】Java线程生命周期如同人生旅程,经历新建、就绪、运行、阻塞至死亡五阶段。从`new Thread()`的诞生到`start()`的蓄势待发,再到`run()`的全力以赴,线程在代码中奔跑。阻塞时面临挑战,等待资源释放,最终通过`join()`或中断结束生命。线程的每个状态转变,都是编程世界与哲思的交汇点。
|
1天前
|
SQL 安全 Java
JUC多线程-线程池-Thredalocal-CAS-AQS-死锁
JUC多线程-线程池-Thredalocal-CAS-AQS-死锁
|
24天前
|
开发框架 监控 Java
【.NET Core】多线程之线程池(ThreadPool)详解(二)
【.NET Core】多线程之线程池(ThreadPool)详解(二)
33 3
|
24天前
|
SQL 开发框架 Java
【.NET Core】多线程之线程池(ThreadPool)详解(一)
【.NET Core】多线程之线程池(ThreadPool)详解(一)
25 2
|
2天前
|
Java
java线程之线程池
java线程之线程池
8 0

热门文章

最新文章