绝 快来听阿里前辈解析ThreadLocal理解,实例+源码

本文首先简要回顾了Java集合框架,包括Collection接口、List接口、Set接口及其常见实现类,强调了HashMap和HashSet在Set中的作用。接着深入探讨了ThreadLocal,解释了其作为线程局部变量的特性,确保每个线程拥有独立的副本,避免了线程间的数据污染。通过源码分析,揭示了ThreadLocalMap中弱引用的使用以防止内存泄漏,并给出了使用ThreadLocal避免内存泄漏的最佳实践。最后,列举了ThreadLocal在数据库连接和处理请求参数等场景的应用实例。
摘要由CSDN通过智能技术生成

之前在我的博客平台分享ThreadLocal相关知识的时候,有粉丝在下面给我留言,整理的不错,但是,因为刚开始,很多东西再回想的时候发现有些遗忘,比方说map相关得内容

其实这是一个很好的学习方法,不仅仅是为了学习某一个知识,而是顺带其他知识点的复习回顾,那今天再分享知识的时候,我前面占用一点空间,整理Java集合的相关内容

java集合

因为这不是今天的重点,所以就大体一过,如果有朋友需要,可以评论区留言,我后面会单独总结一下。如果这部分内容已经很熟悉了,可以跳过

  1. 集合包含Collection接口和Map接口

  2. 顶层接口是collection,底下有2个常用的接口分别为list接口(有序可重复)和set接口(无序不可重复)

  3. list接口常用的实现类有Vector(数组,线程安全),ArrayList(数组,线程不安全),LinkList(链表)

  4. set接口常用的实现类有HashSet(底层HashMap),TreeSet(底层Treemap,二叉树里面的红黑树,可以实现有序,类实现comparable接口,重写compareTo方法)

  5. 顶层接口Map接口(键值对)常用的实现类有Hashtable(线程安全,不允许存放null键,null值),HashMap(哈希表和哈希函数(数组+链表)线程不安全,允许存放null键和null值),TreeMap(红黑树,对键进行排序),properties(Hashtable子类,读配置文件,都是String类型)

总结:

  1. 记一种思想:旧的都是线程安全的,也叫线程同步,但是效率低,最终被新的替代,但是新的效率是提高了但是线程不同步。(这个原理跟StringBuffer,StringBuilder一样) 集合中例如:Vector和ArrayList,Hashtable和HashMap。有相关的工具类(Collections工具类)可以相互转换!

  2. String类重写了hashcode和equals方法,所以可以直接用来当做map的键。

  3. 关于Set保证键唯一:先比较hashcode(有存储地址等等信息),如果不相同,直接加入set即可;如果相同,再比较equals方法,equals方法相同就不加入,equals方法不相同就加入。(不同的对象hash值可能相同(所以需要再用equals判断),但是hash值不同的对象,一定不相同(所以直接加入集合即可)),联想到hash冲突。

  4. Hashset的底层实现是用Hashmap实现的,TreeSet的底层实现使用TreeMap实现的,所以说set是基于map实现的。


好了,开始今天的正题,ThreadLocal来了

ThreadLocal

  1. ThreadLocal意思是线程局部变量,用来存变量的,虽然ThreadLocal结构是个map,但是一个ThreadLocal对象只存一个变量,该变量可以是一个对象,也可以是基本数据类型,有个特点是该变量在每一个用到它的线

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值