- 浏览: 259084 次
- 性别:
- 来自: 北京
-
文章分类
- 全部博客 (232)
- 瞎扯两句 (8)
- 操作系统 (5)
- 工作笔记 (33)
- 设计模式 (1)
- java (57)
- Java IDE (7)
- hibernate (17)
- oracle (46)
- ms sql (2)
- spring (9)
- struts2 (0)
- javascript (16)
- java_code (2)
- java之集合 (2)
- java之线程 (4)
- java之IO (4)
- java之虚拟机 (6)
- java之异常 (0)
- EJB (4)
- XML (4)
- 数据结构-算法 (2)
- 架构设计 (5)
- 配置信息 (2)
- 阅读笔记 (6)
- IT专业英语 (1)
- PI (0)
- 单元测试 (1)
最新评论
之前看资料,总说spring hibernate 是通过threadlocal来实现并发。
更详细的就是session的产生是由threadlocal来实现并发控制,保证多线程安全。
但是只看讲解,真是不理解,时时如鲠在喉。今狠下心看了下源码,终于自认为搞明白了。
实际上就是一个threadlocal实例变量,这个类有get,set方法,且这个方法的特殊之处就在于能得到或设定线程的静态变量threadlocalMap的值,且threadlocalMap的key为该threadlocal实例变量!
根据个人理解详细如下:
sessionFactory 由spring的LocalSessionFactoryBean来产生。
在LocalSessionFactoryBean中,通过一系列的方法调用,最终会产生一个SessionFactoryImpl实例,这个实例就是spring容器管理的sessionFactory 。
而每一个HibernateTemplate都会持有这同一个sessionFactory 的引用。
当调用HibernateTemplate.getSession方法时,实际上是调用的SessionFactoryImpl的currentSessionContext的getCurrentSession()方法。在这个方法中会通过currentSessionContext所持有的ThreadLocal实例对象,去查询当前线程的静态变量ThreadLocalMap中是否保存有以currentSessionContext所持有的ThreadLocal实例对象为key对应的Map,且Map中有以当前sessionFactory 为key对应的session,有则用之,无则新建session并保存。
最终,一个thread的ThreadLocalMap状态如下
thread_1
ThreadLocalMap
table[Entiry](是一个数组 Entity[] table)
table[i]为 <ThreadLocal实例对象, Map<sessionfactory, session > >
其实就是ThreadLocalMap中有一个数组,数组中的每一个Entity,持有不同的threadlocal实例变量 和 Value.
当调用Threadlocal实例变量的get方法时,先取得当前线程的threadlocalmap变量,然后依次遍历该threadlocalmap变量中的table[entity],看哪一个entity持有的Threadlocal实例变量与当前的相匹配,匹配的话则取得对应的entity的value的值。
在hibernate的这里实际应用为:为一个Map且这个Map中也有一个映射,key为HibernateTemplate所持有的sessionFactory ,值为曾将创建过的session。简而言之,就是双重Map!!!ThreadLocalMap的key对应的值为Map类型的目的是区分不同的sessionFactory 对应的session。
这样,当不同的客户请求时,服务器负责产生不同的thread来处理客户的request,对于不同的thread,由同一个ThreadLocal实例变量来负责为不同的thread绑定对应的session。同一线程对应同一客户,就能保证具有同一个session。
更详细的就是session的产生是由threadlocal来实现并发控制,保证多线程安全。
但是只看讲解,真是不理解,时时如鲠在喉。今狠下心看了下源码,终于自认为搞明白了。
实际上就是一个threadlocal实例变量,这个类有get,set方法,且这个方法的特殊之处就在于能得到或设定线程的静态变量threadlocalMap的值,且threadlocalMap的key为该threadlocal实例变量!
根据个人理解详细如下:
sessionFactory 由spring的LocalSessionFactoryBean来产生。
在LocalSessionFactoryBean中,通过一系列的方法调用,最终会产生一个SessionFactoryImpl实例,这个实例就是spring容器管理的sessionFactory 。
而每一个HibernateTemplate都会持有这同一个sessionFactory 的引用。
当调用HibernateTemplate.getSession方法时,实际上是调用的SessionFactoryImpl的currentSessionContext的getCurrentSession()方法。在这个方法中会通过currentSessionContext所持有的ThreadLocal实例对象,去查询当前线程的静态变量ThreadLocalMap中是否保存有以currentSessionContext所持有的ThreadLocal实例对象为key对应的Map,且Map中有以当前sessionFactory 为key对应的session,有则用之,无则新建session并保存。
最终,一个thread的ThreadLocalMap状态如下
thread_1
ThreadLocalMap
table[Entiry](是一个数组 Entity[] table)
table[i]为 <ThreadLocal实例对象, Map<sessionfactory, session > >
其实就是ThreadLocalMap中有一个数组,数组中的每一个Entity,持有不同的threadlocal实例变量 和 Value.
当调用Threadlocal实例变量的get方法时,先取得当前线程的threadlocalmap变量,然后依次遍历该threadlocalmap变量中的table[entity],看哪一个entity持有的Threadlocal实例变量与当前的相匹配,匹配的话则取得对应的entity的value的值。
在hibernate的这里实际应用为:为一个Map且这个Map中也有一个映射,key为HibernateTemplate所持有的sessionFactory ,值为曾将创建过的session。简而言之,就是双重Map!!!ThreadLocalMap的key对应的值为Map类型的目的是区分不同的sessionFactory 对应的session。
这样,当不同的客户请求时,服务器负责产生不同的thread来处理客户的request,对于不同的thread,由同一个ThreadLocal实例变量来负责为不同的thread绑定对应的session。同一线程对应同一客户,就能保证具有同一个session。
发表评论
-
JPA
2012-12-14 17:03 1363AppleFramework在数据访问控制层采用了Spring ... -
浅谈hibernate性能优化的几点建议
2012-05-17 16:41 770浅谈hibernate性能优化的几点建议1、针对oracle数 ... -
AAAAAAAAAAA
2012-05-17 16:22 816相信越来越多的web开发 ... -
hibernate 效率问题总结
2012-05-17 16:14 949一、“精心编写”的JDBC ... -
Hibernate 批量删除 问题
2012-05-17 15:24 879批量处理数据 通常, ... -
Hibernate 二级缓存
2012-04-20 10:35 921二级缓存 Hibernate 对数据的缓存包括两个级: ... -
hibernate对象的三种状态及之间的转换 .
2012-04-20 10:36 1135Hibernate的对象有3种状态,分别为:瞬时态(Trans ... -
Ioc asd
2012-04-18 13:56 39概念: IoC: 基本定义 bean definitio ... -
spring + hibernate 环境搭建中出现的问题总结
2012-04-08 20:20 933新搭建了一个环境,方便测试相关代码。 中间出现了几个小问题,折 ... -
spring AOP
2012-03-26 16:34 903DefaultAopProxyFactory.createAo ... -
wac.refresh
2012-03-16 11:21 1229public void refresh() throws Be ... -
webapplication 初始化
2012-03-15 18:22 848在web.xml中配置了ContextLoaderListen ... -
hibernate之检索策略与检索方式
2012-03-11 10:54 932检索策略包括 立即检索 延迟检索 迫切左外连接 类级别的可以 ... -
spring+hibernate中处理oracle BLOB
2012-02-28 16:11 8921、配置hibernate: 1.1、配置hiber ... -
使用JDBC和Hibernate来写入Blob型数据到Oracle中(1)
2012-02-28 16:09 854转 Oracle的Blob字段比较特殊,他比long字段的性 ... -
通通透透理解ThreadLocal,实现安全的多线程
2012-02-23 11:49 930我们知道Spring通过各种DAO模板类降低了开发者使用各种数 ... -
Spring 源码分析(一)ApplicationContext
2012-02-20 16:41 851web容器初始化时,因为配置了spring的ContextLo ... -
HibernateTemplate 源码分析(三)OpenSessionInViewFilter
2012-02-20 11:45 1086OpenSessionInViewFilter作为一个filt ... -
HibernateTemplate 源码分析(二)
2012-02-20 10:44 1121在Spring中使用Hibernate的方法: 因为最终需 ... -
Spring 笔记 之AOP
2012-02-18 21:14 101Spring AOP,采用动态代理机制和字节码生成技术实现,是 ...
相关推荐
- 在面试中,可能会遇到关于 `ThreadLocal` 生命周期管理、内存泄漏、与 `synchronized` 的比较以及在实际应用中的场景分析等问题。 通过以上介绍,我们可以了解到 `ThreadLocal` 在处理多线程环境中提供了独特的...
3. 在Spring或Hibernate等ORM框架中存放Session:每个线程拥有自己的数据库Session实例,确保事务的独立性。 例如,用ThreadLocal实现线程局部的Singleton模式,可以确保每个线程都有自己的Singleton实例,避免了...
虽然题目中提到的文件内容未涉及数据库知识,但在Java开发中,数据库操作是非常重要的部分,通常涉及到JDBC、ORM框架(如Hibernate、MyBatis)、SQL查询语句等方面的知识。 #### 四、框架与计算机网络 - **框架**...
- **常用开源框架中设计模式使用分析**:分析Spring、Hibernate等框架的设计模式应用。 **1.7 数据结构** - **树**:二叉查找树、平衡二叉树、红黑树、B树、B+树。 - **图算法**:深度优先搜索、广度优先搜索、...
实训商业源码-付费进群自动定位版本-毕业设计.zip
单级热电制冷器件,全球前20强生产商排名及市场份额(by QYResearch).pdf
实训商业源码-Turbo Website Reviewer SEO分析报告工具源码-毕业设计.zip
内容概要:本文详细介绍了利用COMSOL进行铌酸锂波导倍频(PPLN)仿真的方法和技术难点。首先讨论了材料设置中非线性系数d33的空间调制方式,推荐使用tanh函数代替sign函数以提高收敛性。接着阐述了波导结构的选择和模式分析的关键步骤,强调了正确设置边界条件的重要性。对于网格划分提出了在极化周期交界处局部加密的方法,并解释了分步求解策略以节省内存。最后,作者提醒注意相位匹配条件以及考虑实际器件制造中的工艺误差对转换效率的影响。 适合人群:从事非线性光学研究、光子学器件设计的研究人员和工程师。 使用场景及目标:帮助读者掌握COMSOL软件中针对PPLN结构的仿真技巧,优化仿真流程,提升仿真准确性,解决实际项目中可能遇到的问题。 阅读建议:由于文中涉及大量具体的操作细节和技术要点,建议读者结合自己的项目背景仔细研读每个部分的内容,并尝试将所学应用到实践中去。
PLOT2222222222
内容概要:本文介绍了“19永磁直驱风机+混合储能+PQ逆变并网”系统,这是一种集成永磁直驱风机、混合储能设备和PQ逆变器的综合性解决方案,旨在实现可再生能源的高效利用和电网的稳定并网。文中详细阐述了各组件的工作原理及其协同效应,强调了该系统在提高能量转换效率、增强电网稳定性和改善供电质量方面的优势。通过对实际应用效果的分析,展示了该系统在低风速环境下的稳定输出能力、混合储能系统的削峰填谷作用以及PQ逆变器的智能调控和保护功能。 适合人群:从事新能源研究和技术开发的专业人士,关注绿色能源发展的科研工作者和政策制定者。 使用场景及目标:适用于风电场建设、分布式能源系统规划等领域,旨在推动可再生能源的广泛应用,促进电网的智能化和稳定性。 其他说明:随着可再生能源的发展,该系统有望在全球范围内获得更广泛的应用,成为未来能源领域的重要组成部分。
内容概要:本文详细介绍了商用车P2并联混合动力系统的HCU(整车控制器)控制策略及其建模方法。首先探讨了模式切换策略,针对不同工况如车辆速度、电池电量等因素进行模式选择。接着深入讲解了扭矩分配策略,考虑到了温度变化以及坡道情况对扭矩分配的影响。此外,还讨论了能量回收策略,利用预测性制动提高能量利用率。最后提及了故障降级策略,确保系统在出现故障时能够快速响应。文中提供了多个具体代码片段来辅助理解和实施这些策略。 适合人群:从事汽车电子控制系统开发的技术人员,尤其是专注于混合动力系统的研究人员和工程师。 使用场景及目标:帮助开发者将理论性的功能规范转化为实际可用的控制模型,适用于商用车P2并联混合动力系统的开发过程中,旨在提升系统的效率和平顺性。 其他说明:建议读者在实践中不断调整和完善模型参数,以适应不同的应用场景和技术要求。同时,在构建模型时应注意保持良好的可追溯性和验证性,以便后续维护和改进。
OpenAI Agents SDK
干式无油螺杆空压机,2024年前13大企业占据全球78%的市场份额.pdf
实训商业源码-多功能水果外卖电子商务手机模板-毕业设计.zip
.NET Framework 3.5(Windows server系统)
电子设计竞赛相关资源
电子设计竞赛相关资源
膜用聚砜,全球前9强生产商排名及市场份额(by QYResearch).pdf
信號完整性小技巧 #2 EYE CONTOUR.pdf
常规S参数与共模差模S参数转换