Java多线程之ThreadLocal
2015-12-29 22:32
459 查看
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
相关文章推荐
- java instanceof 用法 对象转型(casting)
- 在Console中输出类似Windows系统的日历
- equals、HashCode与实体类的设计
- java开发基础知识总结1
- 【JavaWeb Structs2学习】 Struts2 入门小例子以及action路径讲解
- java学习___File类的查看和删除
- java Servlet(续)
- Java NIO3:通道和文件通道
- Win7下JDK环境变量的设置
- Java中如何获取当前操作系统的相关信息
- 第一次做Java程序注意事项
- XML配置Spring注解
- 菜鸟猿大战Java之常用对象(二)
- [Kerberos] Java client访问kerberos-secured cluster
- Java高级部分容器重点总结下
- IO_字符流_纯文本_节点流_读取_写出_拷贝JAVA151
- 堆排序的java简单实现以及讲解
- 2015/12/29 eclipse 设置要点 空间 项目 类 eclipse汉化
- Java语言程序设计-总结
- Java回调