高频面试八股文用法篇(十八) ThreadLocal线程本地变量
目录
一、什么是ThreadLocal
与synchronized区别
二、实现原理
三、使用场景
四、ThreadLocal 为什么会出现内存泄露?怎么解决?
内存泄露原因
解决方案
1、使用完毕后及时调用remove()方法
2、覆盖ThreadLocal的remove()方法
3、使用弱引用
4、定期检查和清理
五、示例
一、什么是ThreadLocal
ThreadLocal 全称“线程本地变量”. ThreadLocal是Java中用于管理线程局部变量的类,通过为每个线程提供独立的变量副本,解决多线程并发访问共享资源时的线程安全问题。其核心功能是通过隔离线程间的变量存储,避免同步锁带来的性能损耗。
该类的核心方法包括set()、get()、remove()以及可重写的initialValue()。get总是返回由当前执行线程在调用set时设置的最新值。
ThreadLocal实例通常来说都是private static类型的,它们希望将状态与线程进行关联。这种变量在线程的生命周期内起作用,可以减少同一个线程内多个函数或者组件之间一些公共变量的传递的复杂度
作用:多个线程同时操作同一个 ThreadLocal 变量时,每个线程实际操作的都是自己手里的副本,不会影响其他线程的副本,最终实现“线程隔离”,从根源上避免了线程安全问题。
