`
Lance9118
  • 浏览: 12577 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

ThreadLocal 与 Session 管理

阅读更多
  如果没有将Hibernate的Session交由Spring管理,那管理session将会是一件比较麻烦的事情,刚开始学Hibernate的时候,看的视频教程多是基于javase的简单关系操作实现。后来在一个web项目中,持久层打算使用Hibernate,就傻傻的按照以前使用JDBC实现DAO的方式,不断的连接断开数据库,最要命的是还配置了
 <property name="hbm2ddl.auto">update</property>

最终结果就是效率极低,jvm内存满溢。
   解决的问题的关键就是避免每次数据库操作都重新获取一个Session,要能实现Session重用,因为session并非线程安全,重用Session要保证线程安全。
   可能很多人都知道这个方法,这里仅作为个人经验总结和交流之用--ThreadLocal(线程局部变量)。在JVM中为每个运行中的线程创建一个私有的存储空间,不会被其他线程访问.

以其中一个servlet为例:

private ThreadLocal session= new ThreadLocal();

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		
		session.set(getSession());
		dotask(request.getParameter("id"));
		
		Session curSession = session.get();
		if(curSession!=null)
		{
			curSession.flush();
			curSession.close();
			session.set(null);
		}
		
	}
	
	private void dotask(String id)
	{
      Session tempSession =(Session)session.get();
	  Student stu=(Student)tempSession.get(Student.class,id);
	  StuClass stuCla = (StuClass)tempSession.get(StuClass.class,stu.getClassid());
	}



1
1
分享到:
评论

相关推荐

    使用ThreadLocal管理“session”数据

    3. **如何使用ThreadLocal实现Session管理?** 首先,定义一个ThreadLocal变量来存储session对象: ```java public class SessionThreadLocal { public static final ThreadLocal&lt;Session&gt; SESSION_HOLDER = new...

    Hibernager_Session_Manager_ThreadLocal

    总结起来,"Hibernage_Session_Manager_ThreadLocal"是一个关于使用ThreadLocal在多线程环境中优化Hibernate Session管理的技术实践,通过这种方式可以提升应用程序的性能和安全性。`HibernateUtil.java`是实现这一...

    2.Hibernate-02-一级缓存详细教案1

    ThreadLocal与Session管理 #### 2.1 ThreadLocal 在多线程环境中,每个线程应拥有独立的Session实例,以避免数据混乱。ThreadLocal是一种在Java中实现线程局部变量的方法,它可以保证每个线程都有自己的Session...

    JAVA ThreadLocal类深入

    1. **Hibernate的Session管理**: Hibernate框架在处理数据库操作时,使用ThreadLocal来管理Session,确保每个线程都有自己独立的Session对象。这样,即使多个线程并发执行,每个线程也不会干扰其他线程的Session,...

    ThreadLocal的几种误区

    误区二:ThreadLocal与每个session相对应 在Java Web编程中,ThreadLocal与HTTP Session的概念混淆是常见的误解。虽然每个用户会话通常对应一个唯一的Session ID,但ThreadLocal并不直接与用户会话绑定。ThreadLocal...

    通向架构师的道路(第七天)之漫谈使用ThreadLocal改进你的层次的划分

    ThreadLocal自JDK 1.2起就存在,它不是一个线程,而是一种管理线程局部变量的机制。每个线程都有其独立的ThreadLocal变量副本,这样每个线程都可以独立地修改自己的副本而不影响其他线程。这有助于避免并发问题,...

    hibernate中session的管理

    在实际开发中,除了使用ThreadLocal,还有其他几种Session管理策略,例如: 1. **Session per Request/Transaction**:每个HTTP请求或数据库事务分配一个Session。这通常是Web应用程序的最佳实践,因为HTTP请求是...

    正确理解ThreadLocal.pdf

    #### 四、ThreadLocal的生命周期与内存管理 值得注意的是,`ThreadLocal`变量的生命周期与线程的生命周期紧密关联。当线程结束时,与之关联的所有`ThreadLocal`变量也将自动被垃圾回收器回收。然而,如果线程持续...

    Hibernate用ThreadLocal模式(线程局部变量模式)管理Session

    【ThreadLocal模式管理Session的理解】 在使用Hibernate进行数据库操作时,正确管理Session是优化系统性能的关键。Session由SessionFactory创建,而SessionFactory是线程安全的,这意味着它可以被多个并发线程共享...

    入研究java.lang.ThreadLocal类.docx

    **目的**:管理 Hibernate 的 Session,确保每个线程都有独立的 Session 实例。 **关键代码段**: ```java public class HibernateUtil { private static Log log = LogFactory.getLog(HibernateUtil.class); ...

    ThreadLocal的用处

    - 请求上下文:在Web应用中,可以使用ThreadLocal存储HttpServletRequest、Session等与请求相关的数据,确保这些数据只在当前请求的线程内可见。 - 数据库连接:在数据库连接池中,可以使用ThreadLocal为每个线程...

    java中ThreadLocal类的使用

    2. **请求上下文**:在Web应用中,可以使用`ThreadLocal`保存HttpServletRequest或Session对象,方便在同一个请求处理链路中访问。 3. **线程状态**:记录线程执行过程中的状态,例如事务管理、计数器等。 然而,...

    ThreadLocal原理及在多层架构中的应用.pdf

    因此,ThreadLocal非常适合在多层架构中管理数据库连接、用户认证信息等需要线程安全但又不宜在多线程间共享的资源。 数据库连接是一个经典的例子。在没有使用连接池的原始JDBC方式中,每次通过DriverManager.get...

    java面试题汇总

    在这个例子中,`currentSession()`方法检查当前线程的ThreadLocal变量是否有Session,如果没有,则打开新的Session并设置到ThreadLocal中,供后续代码使用。 了解这些Java多线程和ThreadLocal的基础知识对于Java...

    day36 11-Hibernate中的事务:当前线程中的session

    使用ThreadLocal Session的一个关键好处是事务的自动管理。当开启一个新的Session时,Hibernate会隐式地开始一个事务;当Session关闭时,如果之前没有遇到异常,那么事务就会被提交;如果有异常,事务会被回滚,从而...

    中小公司人事管理系统

    private static final ThreadLocal&lt;Session&gt; sessionThread=new ThreadLocal&lt;Session&gt;(); private static final ThreadLocal&lt;Transaction&gt; transactionThread=new ThreadLocal(); private static final Log log=...

    8个案例详解教会你ThreadLocal.docx

    例如,Spring 中的 TransactionTemplate 和 AOP 模块利用 `ThreadLocal` 存储当前事务信息,Hibernate 中的 Session 管理也依赖于 `ThreadLocal` 来保持线程绑定的 Session。 7. **线程安全** - `ThreadLocal` ...

    java 中ThreadLocal 的正确用法

    * Hibernate 的 Session 管理 * 日志记录的线程关联 * 等等 ThreadLocal 的注意事项 在使用 ThreadLocal 时,我们需要注意以下几点: * ThreadLocal 变量应该是 private static 的,以避免外部访问和修改。 * 在...

    Java源码解析ThreadLocal及使用场景

    ThreadLocal期望能够管理一个线程的状态,例如用户id或事务id。 ThreadLocal的使用有很多优点,例如可以解决多线程间共享变量的问题,避免了线程安全问题,提高了程序的稳定性和可靠性。 ThreadLocal的使用方式...

Global site tag (gtag.js) - Google Analytics