Threadlocal

发布时间 2023-08-18 20:27:03作者: JinFangWei

一:Threadlocal的key是弱引用,那么在Threadlocal.get() 的时候,发生GC之后,key 否为nul!?

答:在ThreadLocal中,key是使用弱引用的。在执行ThreadLocal.get()方法时,如果发生了垃圾回收(GC),对应的key会自动被回收,并在下一次ThreadLocal操作时被剔除

 

二:ThreadLocal中ThreadLocalMap 的数据结构?

ThreadLocalMap是ThreadLocal类的内部静态类,它是一个自定义的哈希表,用于存储每个线程的ThreadLocal变量和对应的值。


三:ThreadLocalMap的Hash算法?

ThreadLocalMap是ThreadLocal类的内部静态类,它是一个自定义的哈希表,用于存储每个线程的ThreadLocal变量和对应的值。


四:ThreadLocalMap中Hash冲突如何解决?

当出现ThreadLocalMap中的Hash冲突时,采用开放地址法进行解决。即会顺序查找哈希桶,直到找到一个空的位置或者找到匹配的key。


五:ThreadLocalMap的扩容机制?

ThreadLocalMap的扩容机制是,当当前存储的元素数量超过阈值时,会调用rehash()方法进行扩容。扩容后,将所有数据重新哈希到新的桶中。


六:ThreadLocalMap中过期key的清理机制?探测式清理和启发式清理流程?

ThreadLocalMap中过期key的清理机制包括探测式清理和启发式清理两个步骤。探测式清理是在set、get或remove时判断key是否过期,并进行清除。启发式清理是在调用ThreadLocalMap的set、get或remove方法时,如果发现已经存在过期的key,会立即进行一轮清理


七:ThreadLocalMap. set()方法实现原理?

ThreadLocalMap的set()方法实现原理是,先获取当前线程的ThreadLocalMap对象,然后以自身作为key,要设置的值作为value,将其存入ThreadLocalMap中。


八:ThreadLocalMap. get()方法实现原理?

ThreadLocalMap的get()方法实现原理是,先获取当前线程的ThreadLocalMap对象,再以自身作为key,从ThreadLocalMap中获取对应的值。


九:项目中ThreadLocal使用情况?遇到的坑?

在项目中,ThreadLocal常用于保存线程上下文信息,如用户身份、请求信息等。但需要注意的是,使用ThreadLocal时需避免内存泄漏问题,即在使用完毕后及时清理ThreadLocal的引用,以防止长时间持有对象导致对象无法被回收的情况。另外,多线程环境下使用ThreadLocal时需注意线程安全性和数据一致性的问题,避免出现数据错乱或冲突的情况。