龙空技术网

Java基础之ThreadLocal,你真的搞清楚了吗?

架构之朴实 931

前言:

眼前小伙伴们对“java的local”可能比较关注,我们都需要了解一些“java的local”的相关知识。那么小编也在网上网罗了一些对于“java的local””的相关文章,希望同学们能喜欢,各位老铁们快快来学习一下吧!

ThreadLocal是什么

ThreadLocal,顾名思义,它不是一个线程,而是线程的一个本地化对象。在多线程中的对象使用ThreadLocal时,ThreadLocal为每个使用该变量的线程分配一个独立的变量副本。所以每一个线程都可以独立地改变自己的副本,而不会影响其他线程所对应的副本。从线程的角度看,这个变量就像是线程的本地变量,这就是“Local”所要表达的意思了。ThreadLocal被提出的目的就是为解决多线程的并发问题提供了一种新的思路。

ThreadLocal的接口方法

ThreadLocal的接口很简单,只有4个方法,分别如下:

void set(Object value)

设置当前线程的线程局部变量的值。

public Object get()

返回当前线程所对应的线程局部变量。

public void remove()

删除当前线程局部变量的值。

protected Object initialValue()

返回该线程局部变量的初始值。顺带提一句,这个方法是延时执行的,在线程调用get()或set()时才执行,并且仅执行1次。

ThreadLocal工作原理

ThreadLocal是如何做到为每一个线程维护一份独立的变量副本呢?原理是这样的:ThreadLocal类中有一个Map,用于存储每一个线程的变量副本,Map中每个元素的key为线程对象,而其value为线程的变量副本。

我们自己来实现一个简易版,帮助大家理解:

细心的就会发现,ThreadLocal并没有大家想象的很深奥,其实明白了原理就很简单。

喜欢记得关注我,干货依旧持续更新中。

标签: #java的local