首页 > 代码库 > ThreadLocal小记
ThreadLocal小记
ThreadLocal用于解决单个线程内的数据共享问题,不是线程安全问题的解决方案!!!(多个线程共享的数据才会产生线程安全问题)
ThreadLocal的实现原理大致是:
Thread类中存在一个ThreadLocalMap对象(顾名思义,一个Map,嗯),每次调用ThreadLocal的set、get方法时其实是在间接存取map中的数据,源码:
public void set(T paramT) { Thread localThread = Thread.currentThread(); ThreadLocalMap localThreadLocalMap = getMap(localThread); if (localThreadLocalMap != null) { localThreadLocalMap.set(this, paramT); } else { createMap(localThread, paramT); } }涉及到的getMap方法
ThreadLocalMap getMap(Thread paramThread) { return paramThread.threadLocals; }
值得注意的是,访问权限为默认。同样在Thread中实现的静态ThreadLocalMap类也是默认的访问权限,所以他们仅限包内引用,也决定了ThreadLocal的地位,承担代理角色,使多线程环境透明化。
很重要的get()方法
public T get() { Thread localThread = Thread.currentThread(); ThreadLocalMap localThreadLocalMap = getMap(localThread); if (localThreadLocalMap != null) { ThreadLocal.ThreadLocalMap.Entry localEntry = localThreadLocalMap.getEntry(this); if (localEntry != null) { return localEntry.value; } } return setInitialValue(); }以当前ThreadLocal对象作为key,获得当前Thread map中存储的值。
首尾呼应:ThreadLocal用于解决单个线程内的数据共享问题,不是线程安全问题的解决方案!!!(多个线程共享的数据才会产生线程安全问题)
ThreadLocal小记
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。