您的位置:首页 > 编程语言 > Java开发

理解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

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);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ThreadLoacl