ThreadLocal:线程本地变量

意思就是:每个线程都拥有自己的ThreadLocal。实际上是,不同的线程可以通过同一个ThreadLocal对象获取只属于自己的数据。其实是,ThreadLocal通过每个Thread内部的ThreadLocalMap实现了这个机制。

使用地方有:

  • Android的消息循环机制(Looper Handler MessageQueue)就是基于这个。
  • ...

实例:

public class Main {static final ThreadLocal<String> mThreadLocal = new ThreadLocal<>();public static void main(String[] args) {new Thread("thread1") {@Overridepublic void run() {mThreadLocal.set("value1");try {Thread.sleep(4000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(currentThread().getName() + " localValue:" + mThreadLocal.get());}}.start();try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}new Thread("thread2") {@Overridepublic void run() {mThreadLocal.set("value2");System.out.println(currentThread().getName() + " localValue:" + mThreadLocal.get());}}.start();}
}

输出:

thread2 localValue:value2
thread1 localValue:value1

虽然是同一个ThreadLocal对象,而且都调用的同样的set get方法,但是get方法返回的值,一定是与当前线程对应的。

线程的ThreadLocal机制实际是一套类似Map键值对的机制。

每个Thread拥有一个以ThreadLocalMap属性。

ThreadLocalMap

ThreadLocal的内部类。是以ThreadLocal的hash值为数组下标,Entry元素为值的Entry数组。

Entry

ThreadLocalMap的内部类。继承WeakReference<ThreadLocal<?>>,它持有ThreadLocal的弱引用,保存ThreadLocal.set(value)传入的value

转载于:https://www.cnblogs.com/jiy-for-you/p/7282055.html

ThreadLocal理解相关推荐

  1. java ThreadLocal理解和使用

    一.ThreadLoal的理解 ThreadLoal 变量,它的基本原理是,同一个 ThreadLocal 所包含的对象(对ThreadLocal< String >而言即为 String ...

  2. 全方位,多角度理解ThreadLocal

    欢迎关注方志朋的博客,回复"666"获面试宝典 来源:https://blog.csdn.net/zzg1229059735/article/details/82715741 本次 ...

  3. 聊聊引用和 ThreadLocal 那些事儿

    1 背景 某一天,技术交流群里面的某个群友突然提出了一个问题:"ThreadLocal 的 key 是弱引用,那么在 threadLocal.get() 的时候,发生 GC 之后,key 是 ...

  4. 再有人问你什么是ThreadLocal,就把这篇文章甩给他!

    本文来自作者投稿,原作者:itlemon ,原文地址:https://blog.csdn.net/Lammonpeter/article/details/105175187 ThreadLocal是J ...

  5. 人人都能学会系列之ThreadLocal

    文章目录 1.概览 2.ThreadLocal API 3.存储用户数据在ConcurentHashMap中 4.存储用户数据在ThreadLocal中 5.小心把ThreadLocal和Execut ...

  6. 谈谈引用和Threadlocal的那些事

    1 背景 某一天在某一个群里面的某个群友突然提出了一个问题:"threadlocal的key是虚引用,那么在threadlocal.get()的时候,发生GC之后,key是否是null?&q ...

  7. ThreadLocal与WeakReference

    这篇文章对ThreadLocal理解还是比较认可的. 相信读者在网上也看了很多关于ThreadLocal的资料,很多博客都这样说:ThreadLocal为解决多线程程序的并发问题提供了一种新的思路,T ...

  8. Java培训深度学习都要学什么

    java的知识点有很多,如果是有java基础的同学,进行深度学习是非常有必要的,比较职场技能更新迭代非常的快,那么java培训深度学习都要学什么呢?来看看下面的详细介绍. Java培训深度学习都要学什 ...

  9. Android怎样保证一个线程最多仅仅能有一个Looper?

    1. 怎样创建Looper? Looper的构造方法为private,所以不能直接使用其构造方法创建. private Looper(boolean quitAllowed) {mQueue = ne ...

  10. 北上广Java开发月薪20K往上,该如何做,需要会写什么

    有人回答说这只能是大企业或者互联网企业工程师才能拿到.也许是的,小公司或者非互联网企业拿两万的不太可能是码农了,应该已经转管理.还有区域问题,这个不在我的考虑范围内,因为除了北上广深杭,其他地方也很难 ...

最新文章

  1. u盘循环冗余能修复吗_古董修复能修复吗?-恩平 - 商业服务
  2. jQuery 学习笔记一(认识jQuery jQuery选择器 jQuery中的DOM操作)
  3. PostgreSQL在何处处理 sql查询之四
  4. Hungtingdon road surgery
  5. ES6 深拷贝_你别自以为是:ES6误区 之 Object.assign()、const
  6. [Leetcode 15]三数之和 3 Sum
  7. vnpy学习10_常见坑
  8. KinectFusion: Real-Time Dense Surface Mapping and Tracking
  9. Map对象与实体类Object对象转换
  10. laravel 运用
  11. 如何将 iPhone 用作 Mac 的相机?
  12. Java对Map排序
  13. 外贸必备——各国常用搜索引擎
  14. VS2015卸载经过
  15. UTF-8 ,UTF8, GBK,GB2312 之间的关系和区别
  16. 公司合同管理软件有哪些?
  17. 计算机课代表中段考总结,中段考试总结与反思
  18. 计算机科学技术的广告语,赞美科技的句子-十大经典深入人心科技类广告语
  19. vue项目手机端适配
  20. echarts实现中国地图的下钻和返回上一级

热门文章

  1. 在浏览器的地址栏输入网址的背后
  2. jeecg字典表-系统字典
  3. 程序员如何让自己 Be Cloud Native - 配置篇 1
  4. 并发、可重入性与信号安全
  5. yum grouplist 安装gnome桌面环境
  6. 从HDFS看分布式文件系统的设计需求
  7. 在 java 中_关于final 关键字,在Java中,关于final关键字的说法正确的是()
  8. git revert 之后怎么撤销_Git撤销回滚操作(git reset 和 get revert)
  9. python抓取天气预报_抓取天气预报的代码(Python)
  10. 三菱plc232数据线驱动下载_失易得安卓恢复v5.3.5.0-失易得安卓恢复PC版下载