ThreadLocal与synchronized的区别
ThreadLocal与synchronized关键字都用与处理多线程并发访问变量的问题,但这两者角度和思路不同
synchronized | ThreadLocal | |
---|---|---|
原理 | 同步机制,采用的是以时间换空间的方式,只提供了一份变量,让不同的线程排队访问 | ThreadLocal采用的是以空间换时间,为每一个线程都提供了一份变量副本,从而实现同时访问而互相不干扰 |
侧重点 | 多线程之间访问资源的同步 | 多线程中让每个线程之间的数据相互隔离 |
ThreadLocal的内部结构
jdk8中,每个Thread维护一个ThreadLocalMap这个Map的key是ThreadLocal的实例对象本身
当使用threadlocal 存储时
thread就从绑定这个线程并获取维护的ThreadLocalMap,存键值对
追寻源码Entry
Entry继承了弱引用,super掉用了弱引用