栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Hibernate的程序不会终止

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Hibernate的程序不会终止

也许,我解决了这个问题。

在调用Util.getSessionFactory()。close()之后,我看到了线程转储,名为“
pool-2-thread-1”的线程的状态为TIMED_WAITING(停车)。

以下代码片段转储

Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.0-b69 mixed mode):"DestroyJavaVM" #16 prio=5 os_prio=0 tid=0x00000000020b9000 nid=0x3684 waiting on condition [0x0000000000000000]   java.lang.Thread.State: RUNNABLE"pool-2-thread-1" #15 prio=5 os_prio=0 tid=0x000000001bc27000 nid=0x3f0 waiting on condition [0x000000001ce6f000]   java.lang.Thread.State: TIMED_WAITING (parking)    at sun.misc.Unsafe.park(Native Method)    - parking to wait for  <0x0000000080be30a0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093)    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)    at java.lang.Thread.run(Thread.java:744)"derby.rawStoreDaemon" #14 daemon prio=5 os_prio=0 tid=0x000000001b059000 nid=0xa3c in Object.wait() [0x000000001ba1f000]   java.lang.Thread.State: TIMED_WAITING (on object monitor)    at java.lang.Object.wait(Native Method)    - waiting on <0x00000000805f6190> (a org.apache.derby.impl.services.daemon.BasicDaemon)    at org.apache.derby.impl.services.daemon.BasicDaemon.rest(Unknown Source)    - locked <0x00000000805f6190> (a org.apache.derby.impl.services.daemon.BasicDaemon)    at org.apache.derby.impl.services.daemon.BasicDaemon.run(Unknown Source)    at java.lang.Thread.run(Thread.java:744)"Timer-0" #13 daemon prio=5 os_prio=0 tid=0x000000001b08e800 nid=0x2160 in Object.wait() [0x000000001b6af000]   java.lang.Thread.State: WAITING (on object monitor)    at java.lang.Object.wait(Native Method)    - waiting on <0x0000000080608118> (a java.util.TaskQueue)    at java.lang.Object.wait(Object.java:502)    at java.util.TimerThread.mainLoop(Timer.java:526)    - locked <0x0000000080608118> (a java.util.TaskQueue)    at java.util.TimerThread.run(Timer.java:505)

我以为原因是buildSessionFactory方法创建的名为“ pool-2-thread-1”的线程。

比较两个buildSessionFactory方法的结果是,我注意到ServiceRegistry资源尚未释放。

程序通过释放成功终止。

下面的代码,我添加。

实用程序

configuration.setSessionFactoryObserver(        new SessionFactoryObserver() { @Override public void sessionFactoryCreated(SessionFactory factory) {} @Override public void sessionFactoryClosed(SessionFactory factory) {     ((StandardServiceRegistryImpl) serviceRegistry).destroy(); }        });

谢谢。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/379345.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号