TA的每日心情  | 开心 2021-3-12 23:18 | 
|---|
 
  签到天数: 2 天 [LV.1]初来乍到  
 | 
 
| 
 
 具体代码如下  
 
  1. public static final ThreadLocal session = new ThreadLocal();  
  2. public static Session currentSession() {  
  3. Session s = (Session)session.get();  
  4. //open a new session,if this session has none  
  5. if(s == null){  
  6. s = sessionFactory.openSession();  
  7. session.set(s);  
  8. }  
  return s;  
  9. }  
  我们逐行分析  
  1。 初始化一个ThreadLocal对象,ThreadLocal有三个成员方法 get()、set()、initialvalue()。  
  如果不初始化initialvalue,则initialvalue返回null。  
  3。session的get根据当前线程返回其对应的线程内部变量,也就是我们需要的net.sf.hibernate.Session(相当于对应每个数据库连接).多线程情况下共享数据库链接是不安全的。ThreadLocal保证了每个线程都有自己的s(数据库连接)。  
  5。如果是该线程初次访问,自然,s(数据库连接)会是null,接着创建一个Session,具体就是行6。  
  6。创建一个数据库连接实例 s  
  7。保存该数据库连接s到ThreadLocal中。  
  8。如果当前线程已经访问过数据库了,则从session中get()就可以获取该线程上次获取过的连接实例。 |   
 
 
 
 |