zoukankan      html  css  js  c++  java
  • ThreadLocal

    package cn.happy.util;

    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;

    public class ThreadUtil {
    // 初始化一个ThreadLocal对象
    private static final ThreadLocal sessionTL = new ThreadLocal();
    private static Configuration configuration;
    private final static SessionFactory sessionFactory;
    static {
    try {
    configuration = new Configuration().configure();
    sessionFactory = configuration.buildSessionFactory();
    } catch (Throwable ex) {
    throw new ExceptionInInitializerError(ex);
    }
    }
    public static Session currentSession() {
    //sessionTL的get()方法根据当前线程返回其对应的线程内部变量,
    //也就是我们需要的Session,多线程情况下共享数据库连接是不安全的。
    //ThreadLocal保证了每个线程都有自己的Session。
    Session session = (Session) sessionTL.get();
    // 如果session为null,则打开一个新的session
    if (session == null) {
    //创建一个数据库连接对象session。
    session = sessionFactory.openSession();
    // 保存该数据库连接session到ThreadLocal中。
    sessionTL.set(session);
    }
    //如果当前线程已经访问过数据库了,
    //则从sessionTL中get()就可以获取该线程上次获取过的数据库连接对象。
    return session;
    }


    /**
    * 关闭Session
    */
    public static void closeSession(){
    Session session = (Session) sessionTL.get();
    sessionTL.set(null);
    session.close();
    }
    }

  • 相关阅读:
    判断分流使用
    Mac系统如何显示隐藏文件?
    Brew安装的软件查询安装位置
    JetBrains 产品线破解方法
    Linux查看与挂载新磁盘
    对BRD、MRD、PRD、FSD四类产品文档的理解
    网站收藏
    收藏
    官方文档
    java 的访问权限控制
  • 原文地址:https://www.cnblogs.com/Smile-123/p/5827093.html
Copyright © 2011-2022 走看看