【发布时间】:2010-02-10 19:30:35
【问题描述】:
每次我在开发服务器上运行我的应用程序时,它似乎都会死锁。我不确定它是否也会在生产服务器上死锁。我暂停线程,发现其中一个线程卡在 Permissions.implies:162 处,这是 synchronized 块的开始。
我的代码所做的是:在主页上,它同时向我的InitServlet servlet 发送5 个jquery 请求,该servlet 具有service 方法synchronized。每次通过 service 方法初始化一个不同的组件,每个组件大约需要 2 秒来初始化。线程到达服务方法的顺序无关紧要,这种情况只发生5次,在服务器启动期间,所以我认为同步服务方法应该没问题。
关于如何解决这个死锁的任何建议,或者有谁知道它是否只是开发服务器的一个错误?
编辑:弄清楚死锁发生在哪里,但仍然不知道为什么。在 Permissions.implies 的锁内,一个线程调用 Class.getDeclaredConstructors0,并且永远不会从它返回。另一个线程正在等待获取 Permissions.implies 的锁。挂在getDeclaredConstructors0 上的第一个线程正在为从 GAE 示例文档中获取的标准 PersistenceManagerFactory 类进行类初始化。
【问题讨论】:
标签: java google-app-engine synchronization jakarta-ee