美文网首页Java互联网科技
Threadlocal很难?教你一句话读懂

Threadlocal很难?教你一句话读懂

作者: Java码农石头 | 来源:发表于2020-04-22 16:55 被阅读0次

介绍

threadlocal是把ThreadLocal实例作为key,要保持的对象作为值,设置到当前线程的ThreadLocalMap 中。因此数据是保存在当前线程中的。

ThreadLocalMap实例是作为java.lang.Thread的成员变量存储的,每个线程有唯一的一个threadLocalMap。这个mapThreadLocal对象为key,”线程局部变量”为值,所以一个线程下可以保存多个”线程局部变量”。对ThreadLocal的操作,实际委托给当前Thread,每个Thread都会有自己独立的ThreadLocalMap实例,存储的仓库是Entry[] tableEntrykeyThreadLocal,value为存储内容;因此在并发环境下,对ThreadLocalsetget,不会有任何问题。

总之ThreadLocal不是用来解决对象共享访问问题的,而主要是提供了保持对象的方法和避免参数传递的方便的对象访问方式。归纳了两点:

1.每个线程中都有一个自己的ThreadLocalMap类对象,可以将线程自己的对象保持到其中,各管各的,线程可以正确的访问到自己的对象。

2.将一个共用的ThreadLocal静态实例作为key,将不同对象的引用保存到不同线程的ThreadLocalMap中,然后在线程执行的各处通过这个静态ThreadLocal实例的get()方法取得自己线程保存的那个对象,避免了将这个对象作为参数传递的麻烦。

ThreadLocal建议

1.ThreadLocal应定义为静态成员变量。

2.能通过传值传递的参数,不要通过ThreadLocal存储,以免造成ThreadLocal的滥用。

3.在线程池的情况下,在ThreadLocal业务周期处理完成时,最好显式的调用remove()方法,清空”线程局部变量”中的值。

4.正常情况下使用ThreadLocal不会造成内存溢出,弱引用的只是threadLocal,保存的值依然是强引用的,如果threadLocal依然被其他对象强引用,”线程局部变量”是无法回收的。

相关文章

  • Threadlocal很难?教你一句话读懂

    介绍 threadlocal是把ThreadLocal实例作为key,要保持的对象作为值,设置到当前线程的Thre...

  • 读懂ThreadLocal

    ThreadLocal该类可以实现线程本地变量,即每个线程访问的变量是属于不同的副本的。先来段测试代码,然后根据源...

  • 一文读懂系列-ThreadLocal

    一文读懂系列-ThreadLocal 前言 ThreadLocal大家应该也经常听说,但是可能大家在日常工作中真正...

  • ThreadLocal本质

    无数的书籍、文章资料在讲ThreadLocal的时候从ThreadLocal切入,这样很难理解ThreadLoca...

  • (八)ThreadLocal的使用及原理分析

    什么是ThreadLocal ThreadLocal,简单翻译过来就是本地线程,但是直接这么翻译很难理解Threa...

  • 服装设计-聊聊配色

    可可之前写过一篇(设计师教你读懂色彩)(设计师教你读懂色彩-续篇)的文章,分为上下篇,讲了一些比较常用的配色组合以...

  • 每日一句

    很难读懂的张爱玲。

  • 初识ThreadLocal理解和使用场景—小白学习篇

    为什么使用ThreadLocal?初识ThreadLocal时,第一句话就是说其是为了解决线程安全问题的,这句话可...

  • 2018.4.8

    《手把手教你读财报》 《一本书读懂财报》

  • ThreadLocal

    ThreadLocal 简介ThreadLocal 使用ThreadLocal 原理InheritableThre...

网友评论

    本文标题:Threadlocal很难?教你一句话读懂

    本文链接:https://www.haomeiwen.com/subject/sahwihtx.html