理解java.lang.ThreadLocal 类
2014-07-31 10:35
417 查看
一、概述
ThreadLoacl很容易让人望文生义,想当然认为是一个“本地线程”。其实,ThreadLocal并不是一个Thread,
而是Thread 的局部变量,也许把它命名为ThreadLocalVariable更容易让人理解。
二、JDK API 1.6.0:
public class ThreadLocal<T> extends Object .
ThreadLocal 提供了线程局部(thread-local)变量。这些变量不同于它们的普通 对应物,因为访问某个变量(通过其 get 或set 方法)的每个线程都有自己的局部变量,它独立于变量的初始化副本。ThreadLocal实例通常是类中的private
static 字段,它们希望将状态与某一个线程(例如,用户ID或事务ID)相关联。
构造方法:ThreadLocal():创建一个线程本地变量
方法摘要:
◆ T get():返回此线程局部变量的当前线程副本中的值,如果这是线程第一次调用该方法,则创建并初始化该副本。
◆
protected T initialValue():返回此线程局部变量的当前线程的”初始值“。
◆remove():移除此线程局部变量当前线程的值。
◆ set(T value):将此线程局部变量的当前线程副本中的值设置为指定值。
三、应用举例
Hibernate的Session 工具类HibernateUtil
ThreadLoacl很容易让人望文生义,想当然认为是一个“本地线程”。其实,ThreadLocal并不是一个Thread,
而是Thread 的局部变量,也许把它命名为ThreadLocalVariable更容易让人理解。
二、JDK API 1.6.0:
public class ThreadLocal<T> extends Object .
ThreadLocal 提供了线程局部(thread-local)变量。这些变量不同于它们的普通 对应物,因为访问某个变量(通过其 get 或set 方法)的每个线程都有自己的局部变量,它独立于变量的初始化副本。ThreadLocal实例通常是类中的private
static 字段,它们希望将状态与某一个线程(例如,用户ID或事务ID)相关联。
构造方法:ThreadLocal():创建一个线程本地变量
方法摘要:
◆ T get():返回此线程局部变量的当前线程副本中的值,如果这是线程第一次调用该方法,则创建并初始化该副本。
◆
protected T initialValue():返回此线程局部变量的当前线程的”初始值“。
◆remove():移除此线程局部变量当前线程的值。
◆ set(T value):将此线程局部变量的当前线程副本中的值设置为指定值。
三、应用举例
Hibernate的Session 工具类HibernateUtil
import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtil { private static SessionFactory sf; private static ThreadLocal<Session> tl = new ThreadLocal<Session>(); static{ Configuration conf = new Configuration(); conf.configure("/hibernate.cfg.xml"); sf = conf.buildSessionFactory(); } public static Session getSession(){ Session session = tl.get(); if(session == null || !session.isOpen()){ session = sf.openSession(); tl.set(session); } return session; } public static void closeSession(){ Session session = tl.get(); tl.set(null); if(session != null){ session.close(); } } public static void main(String[] args){ Session session1 = getSession(); Session session2 = getSession(); System.out.println(session1==session2); } }
相关文章推荐
- 深入研究java.lang.ThreadLocal类
- 简单理解java.lang.IllegalStateException异常:简单分析和简单解决方案
- 深入研究java.lang.ThreadLocal
- java.lang.ThreadLocal类
- 理解java中的ThreadLocal
- 对异常 java.lang.IllegalStateException: getAttribute: Session already invalidated的理解 .
- 简单理解java.lang.IllegalStateException异常:简单分析和简单解决方案
- 深入研究java.lang.ThreadLocal类
- 理解java中的ThreadLocal
- 深入研究java.lang.ThreadLocal类
- 简单理解java.lang.IllegalStateException异常
- 深入研究java.lang.ThreadLocal类
- java.lang.ThreadLocal()的用法
- Java学习札记17:理解 ThreadLocal
- 深入研究java.lang.ThreadLocal类
- 简单理解java.lang.IllegalStateException异常:简单分析和简单解决方案
- Java.lang.ThreadLocal类
- 对异常 java.lang.IllegalStateException: getAttribute: Session already invalidated的理解
- java.lang.IllegalStateException: STREAM错误的理解
- 深入研究java.lang.ThreadLocal类