本准备看ConcurrentHashMap的知识,突然发现需要很多并发方面的知识,于是又去补多线程和并发知识,除了基础方法 线程状态 CAS AQS 和ThreadLocal这些也都需要做些了解
https://blog.csdn.net/javazejian/article/details/75043422(AQS)
https://blog.csdn.net/javazejian/article/details/72772470(CAS)
https://blog.csdn.net/qq_35190492/article/details/107599875(ThreadLocal的介绍)
ThreadLocal是个神奇的类,不加锁实现了数据在线程之间的隔离性,但有内存泄露的风险,而提到内存泄漏,又会扯到ThreadLocal中对于弱引用的key和强引用的value是怎么分开引用的,于是又去看了下java中的四种引用:java中强弱虚软四种引用简介_future_xiaowu的博客-CSDN博客
简略概括下转载的内容
1 ThreadLocal实现数据线程间隔离的原理
2 ThreadLocal中对弱引用的key,以及存在强引用链Tread->ThreadLocalMap->Entry->value的value的回收策略,由于线程池的存在导致线程不会被回收,value的回收是考特定方法实现的
3 InheritableThreadLocal实现线程数据共享
4 ThreadLocalMap中hash冲突的处理策略(不借助像HashMap一样的链表结构,直接使用下一个桶位置)