多线程
谈谈你对ThreadLocal的理解
ThreadLocal概述 ✔ ThreadLocal是多线程中对于解决线程安全的一个操作类,它会为每个线程都分配一个独立的线程副本从而解决了变量并发访问冲突的问题。ThreadLocal 同时实现了线程内的资源共享。 ✔ ThreadLocal本质来说就是一个线程内部存储类,从而让多个线程只操作自己内部的值,从而实现线程数据隔离。 案例:使用JDBC操作数据库时,会将每一个线程的Connection放入各自的ThreadLocal中,从而保证每个线程都在各自的 Connection上进行数据库的操作,避免A线程关闭了B线程的连接。
❒ ThreadLocal 可以实现【资源对象]的线程隔离,让每个线程各用各的[资源对象],避免争用引发的线程安全问题 ❒ ThreadLocal 同时实现了线程内的资源共享 ❒ 每个线程内有一个ThreadLocalMap类型的成员变量,用来存储资源对象 ✔ 调用 set 方法,就是以ThreadLocal自己作为key,资源对象作为value,放入当前线程的 ThreadLocalMap集合中 ✔ 调用 get 方法,就是以ThreadLocal 自己作为key,到当前线程中查找关联的资源值 ✔ 调用remove方法,就是以ThreadLocal自己作为key,移除当前线程关联的资源值 ❒ ThreadLocal内存泄漏问题 ✔ ThreadLocalMap中的key是弱引用,值为强引用;key会被GC释放内存,关联value的内存并不会释放。建议主动remove释放key,value