我试图理解“休眠会话不是线程安全的”的含义。我已经知道的(如果我错了,请纠正我):
- 非 JTA 环境中的会话保存在 Thread Local 中。所以它绑定到当前线程。
- 在新线程中调用 getCurrentSession() 会将新会话与其自己的本地线程相关联。
- 假设我们在 2 个线程(T1,T2)之间共享一个实体,在 T1 中加载并在 T2 中使用,我们可能会遇到延迟加载等问题,因为 T1 和 T2 中的会话不同。
这解释了在不同会话之间共享实体时可能出现的问题。
我无法理解的是在 2 个或更多线程之间共享 Session 时可能出现的问题。我知道 Session 中的方法不是线程安全的,并且可能导致竞争条件等,但不清楚如何?如果有人可以用示例进行解释或列出一个或多个场景以进行澄清,我将不胜感激。
提前致谢