ThreadLocal的使用
来源:互联网 发布:淘宝旺旺名是什么意思 编辑:程序博客网 时间:2024/06/05 02:41
ThreadLocal可以理解为一种线程变量,作用域为当前线程,一次请求内可以算一个线程,可用于在一个线程间共享。好处是避免了层与层之间的参数传递,实现松耦合。
public class SessionContainer {private static final ThreadLocal<SessionCache> sessionThreadLocal = new ThreadLocal<SessionCache>();public static SessionCache getSession() {return sessionThreadLocal.get();}public static void setSession(SessionCache sessionCache) {sessionThreadLocal.set(sessionCache);}public static void clear() {sessionThreadLocal.set(null);}}
首先,ThreadLocal 不是用来解决共享对象的多线程访问问题的,一般情况下,通过ThreadLocal.set() 到线程中的对象是该线程自己使用的对象,其他线程是不需要访问的,也访问不到的。各个线程中访问的是不同的对象。
另外,说ThreadLocal使得各线程能够保持各自独立的一个对象,并不是通过ThreadLocal.set()来实现的,而是通过每个线程中的new 对象的操作来创建的对象,每个线程创建一个,不是什么对象的拷贝或副本。public T get() { Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); if (map != null) { ThreadLocalMap.Entry e = map.getEntry(this); if (e != null) { @SuppressWarnings("unchecked") T result = (T)e.value; return result; } } return setInitialValue(); }
public void set(T value) { Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); if (map != null) map.set(this, value); else createMap(t, value); }
通过ThreadLocal.set()将这个新创建的对象的引用保存到各线程的自己的一个map中,每个线程都有这样一个map,执行ThreadLocal.get()时,各线程从自己的map中取出放进去的对象,因此取出来的是各自自己线程中的对象,ThreadLocal实例是作为map的key来使用的。 ThreadLocal的实现是在每个线程中有一个map,而将ThreadLocal实例作为key,这样每个map中的项数很少,而且当线程销毁时相应的东西也一起销毁了。
0 0
- ThreadLocal的使用- -
- ThreadLocal的使用
- ThreadLocal 的使用
- ThreadLocal的使用
- 关于ThreadLocal的使用
- Threadlocal类的使用
- ThreadLocal的使用
- ThreadLocal的使用
- ThreadLocal的使用
- java ThreadLocal的使用
- 关于ThreadLocal的使用
- ThreadLocal的优雅使用
- ThreadLocal的使用
- 关于ThreadLocal的使用
- ThreadLocal的使用
- ThreadLocal的使用
- ThreadLocal 的使用
- ThreadLocal的使用
- 安卓改变进度条的颜色progressbar
- 网络基础知识总结
- Features From Accelerated Segment Test
- IPC
- 秒杀多线程第二篇 多线程第一次亲密接触 CreateThread与_beginthreadex本质区别
- ThreadLocal的使用
- java实现双连表
- CSS清除浮动
- tar、7z(7zip)压缩/解压缩指令的使用
- BZOJ1513: [POI2006]Tet-Tetris 3D
- 51nod-活动安排问题之二
- Java后端WebSocket的Tomcat实现
- Eclipse快捷键大全
- Java中断机制