【发布时间】:2016-02-23 21:25:20
【问题描述】:
我们使用 hibernate 4.3.8.Final、Spring4 和 Java7。
每天有几次我们遇到一些线程在 HashMap.getEntry() 中永远挂起的问题,请参阅 ThreadDump 中的 StackTrace
"catalina77" daemon prio=10 tid=0x00007fa600086800 nid=0x28b7 runnable [0x00007fa5cc6c1000]
java.lang.Thread.State: RUNNABLE
at java.util.HashMap.getEntry(HashMap.java:465)
at java.util.HashMap.get(HashMap.java:417)
at org.hibernate.engine.internal.StatefulPersistenceContext.getEntity(StatefulPersistenceContext.java:393)
at ...
这只会发生,因为底层的 HashMap 被两个不同的线程使用。由于 HashMap 不是线程安全的,该方法会因为 HashMap 第 465 行中的 e = e.next 而永远循环
我很确定我们有两个线程使用相同的休眠会话。
【问题讨论】:
标签: performance hibernate session