理解java.lang.ThreadLocal 类

一、概述

 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):将此线程局部变量的当前线程副本中的值设置为指定值。


 三、应用举例

 HibernateSession 工具类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);
	}
	
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值