hibernate中是否存在多个线程同时访问同一个Session?
2017-02-14 00:40
274 查看
既然 SessionFactory.openSession() 每次获得的都是不同的对象,那就根本不存在多线程访问冲突的问题,为什么还要搞 ThreadLocal 之类的东西来解决这个所谓的问题?
如果是这个问题,那我是这样理解的:“多线程访问冲突”的问题,并不是一开始需要解决的问题,而是为了解决另外一个问题时产生的问题。真正要解决的是“如何在程序处理过程中随时能得到一个 session 对象,用于数据库操作”。
一个 request 被 servlet 处理的过程中,会穿透很多层代码,用参数传递显然不方便,所以要能够“随时得到”,但同时又希望整个过程中得到的都是同一个 session 对象,这样才方便事务控制等要求。那么怎么办呢?“单例”和“全局变量”都可以达到这个目标,但都会产生“多线程访问冲突”的问题。于是就有了 ThreadLocal 这种类似于“全局变量”的方法。
如果是这个问题,那我是这样理解的:“多线程访问冲突”的问题,并不是一开始需要解决的问题,而是为了解决另外一个问题时产生的问题。真正要解决的是“如何在程序处理过程中随时能得到一个 session 对象,用于数据库操作”。
一个 request 被 servlet 处理的过程中,会穿透很多层代码,用参数传递显然不方便,所以要能够“随时得到”,但同时又希望整个过程中得到的都是同一个 session 对象,这样才方便事务控制等要求。那么怎么办呢?“单例”和“全局变量”都可以达到这个目标,但都会产生“多线程访问冲突”的问题。于是就有了 ThreadLocal 这种类似于“全局变量”的方法。
相关文章推荐
- 异常描述:hibernate懒加载中,用OpenSessionInViewFilter解决之后,同时对一个collection创建两个session访问导致异常(Illegal attempt to associate a collection with two open sessions)
- 一个 SQL 同时验证帐号是否存在、密码是否正确
- 同时存在n个线程(n>5),需要写入或者读取一个名为test.txt的文件
- 同时创建多个线程,它们都访问一个对象中的同步方法,怎么确保第一个线程最先拿到对象锁,否则,怎么保证多个线程之间的有序通信
- 一个域名下两个不同端口的项目session不能同时存在
- [转]一个 SQL 同时验证帐号是否存在、密码是否正确
- 解决Installer重新安装补丁错误-"无法打开此修补程序包。请确认该修补程序包存在,并且您可以访问它,或者与应用程序供应商联系,以确认这是否是一个有效的 Windows Installer 修补程序包。"
- Java - Hibernate中SessionFactory是线程安全的吗?Session是线程安全的吗(两个线程能够共享同一个Session吗)?
- 一个 SQL 同时验证帐号是否存在、密码是否正确
- 一个 SQL 同时验证帐号是否存在、密码是否正确
- 判断特定窗口是否存在、线程中获取获得一个顶层窗口的句柄
- C#技巧【调用线程无法访问此对象,因为另一个线程拥有该对象的问题的解决办法】【C#读写EXCEL源码提示“office检测到此文件存在一个问题。为帮助保护您的计算机,不能打开此文件”的解决】
- 同时存在n个线程(n>5),需要写入或者读取一个名为test.txt的文件
- 同时存在n个线程(n>5),需要写入或者读取一个名为test.txt的文件
- 一个 SQL 同时验证帐号是否存在、密码是否正确
- 同时存在n个线程(n>5),需要写入或者读取一个名为test.txt的文件
- Hibernate中同一个线程获取相同session
- 同时存在n个线程(n>5),需要写入或者读取一个名为test.txt的文件
- 同时存在n个线程(n>5),需要写入或者读取一个名为test.txt的文件
- 一个类有两个方法,其中一个是同步的,另一个是非同步的; 现在又两个线程A和B,请问:当线程A访问此类的同步方法时,线程B是否能访问此类的非同步方法?