ThreadLocal
背景
起初是在实现aop的读写分离功能,需要标注当前请求应该走哪个数据库功能,但是每个请求是分属于不同线程,且该标注是需要跨方法传递下去的上下文参数,因此使用了ThreadLocal,其线程本地存储模式特性来实现该功能。
原理预想
ThreadLocal是 每个线程的本地存储,意思有点加强版局部变量的味道,针对此特性,很容易想到其实现细节应该是ThreadLocal里维护了一个map,map的key是Thread,value是本地存储object,具体如下
其代码实现:
class MyThreadLocal<T> {
Map<Thread, T> locals =
new ConcurrentHashMap<>();
//获取线程变量
T get() {
return locals.