Java多线程之ThreadLocal
来源:互联网 发布:小黑屋写作软件ios 编辑:程序博客网 时间:2024/04/30 03:26
1.定义
ThreadLocal使用一个Map的形式来为线程提供变量,在同一个线程中能保证变量的唯一性,Map的key为线程id;
ThreadLocal 实例通常是类中的 private static 字段,我们希望将状态与某一个线程相关联。
2.源码分析
get()/set()
public T get() { Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); if (map != null) { ThreadLocalMap.Entry e = map.getEntry(this); if (e != null) return (T)e.value; } 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); }
3.实例
通过模拟浏览器访问服务器时,服务器会为每个浏览器创建一个线程。,如果使用这种机制获取 Session,当同一个用户浏览器无论怎么调用session
都是同一个(在相同的线程中);这种机制就叫做线程单例
package com.ccy.thread.demo;/** * * <p> * Title: ThreadLocalTest.java * Package com.ccy.thread.demo * </p> * <p> * Description: 模拟浏览器访问服务器,同一个浏览器,返回的是同一个session * <p> * @author Tom.Cai * @created 2015-12-29 下午10:30:12 * @version V1.0 * */public class ThreadLocalTest {public static void main(String[] args) {Session session = SessionFactory.getInstance();System.out.println(session);System.out.println("----");printfClass();}public static void printfClass(){Session session = SessionFactory.getInstance();System.out.println(session);}}class Session{}class SessionFactory{private static ThreadLocal<Session> tLocal= new ThreadLocal<Session>();public static Session getInstance(){Session session = tLocal.get();if(null == session){session = new Session();tLocal.set(session);}return session;}}
更多多线程精彩内容请继续关注我的博客:http://blog.csdn.net/caicongyang
记录与分享,你我共成长 -from caicongyang
1 0
- Java多线程之ThreadLocal
- Java多线程之ThreadLocal
- JAVA多线程之ThreadLocal
- Java多线程之 ThreadLocal
- java多线程之ThreadLocal
- Java多线程之----ThreadLocal
- Java多线程之ThreadLocal
- Java多线程之ThreadLocal
- java多线程之ThreadLocal
- java多线程之ThreadLocal
- Java 多线程之--ThreadLocal 简介
- (四)java多线程之ThreadLocal
- java多线程并发控制之ThreadLocal
- java多线程之——ThreadLocal
- (8)Java多线程之ThreadLocal
- java多线程并发控制之ThreadLocal
- Java多线程学习之ThreadLocal源码分析
- java多线程之ThreadLocal源码分析
- 偏好设置
- UIWebView的使用
- AlertDialog对话框弹出后,旋转屏幕,对话框消失,造成leak window
- 第7章 函数表达式小结
- STL之sort 排序
- Java多线程之ThreadLocal
- plist和NSUserdefaults存储
- HDOJ 1312 Red and Black【dfs】
- 使用Intent实现Activity跳转
- IOS 项目简介
- Android实战(八)------点击空白可消失的弹出层dialog中显示动态高度宽度的gridview
- 属性文件读写工具类
- 封装NetWorkingTool
- Android Studio如何添加外部资源