ThreadLocal相关知识

1.是什么?

ThreadLocal是线程的局部变量,是每一个线程所单独持有的,其他线程不能对其访问,这就是ThreadLocal命名的来源。

2.有什么用?

我们知道有时候一个对象可以被多个线程访问,这是就会有线程安全问题,当然我们可以用Synchorinized对此变量进行加锁,但是这就极大地影响效率,可以用ThreadLocal来解决某一变量的访问。

Threadlocal适用于每个线程需要自己的实例,且实例需要多个方法被使用,即变量在线程间隔离而在方法和类中共享。

  • 储存用户的session
  • 解决线程安全的问题

3.原理是什么?

ThreadLocal这个是泛型类,可以接受任何类型的对象。

因为一个线程可以维护多个ThreadLocal对象,所以其实ThreadLocal内部维护了一个map,这个map不是直接使用HashMap,ThreadLocal实现了一个ThreadLocalMap的静态内部类,我们使用的set()``get()这些方法都是ThreadLocalMap的方法

4.怎么使用?

共计3个方法set(),get(),remove()

5.有什么需要注意的?

实际上ThreadLocalMap中的key使用的是ThreadLocal 的弱引用,弱引用的特点是如果这个对象只存在弱引用,则下次的垃圾回收时将会被清理掉。但是ThreadLocalMapvalue 为强引用,不会被清理。这样就会出现keynullvalue

存在内存泄露问题,每次使用完ThreadLocal,都调用它的remove()方法,清除数据

猜你喜欢

转载自blog.csdn.net/weixin_43221207/article/details/106349555