我每次都在开发服务器上运行我的应用程序,似乎陷入僵局。我不确定它是否也在生产服务器上死锁。我暂停线程,看到其中一个被卡在Permissions.Implies:162这是synchronized
块的开始。
我的代码所做的是:在主页上,它同时向具有InitServlet
方法service
synchronized
方法的getDeclaredConstructors0
servlet发送5个jquery请求。每次通过服务方法初始化一个不同的组件,每个组件花费大约2秒来初始化。线程到达服务方法的顺序无关紧要,在服务器的启动时间内只发生5次,所以我认为同步服务方法应该没问题。
有关如何修复此死锁的任何建议,或者是否有人知道它是否只是开发服务器的错误?
编辑:弄清楚死锁发生的地方,但仍然不知道为什么。在Permissions.implies的锁内部,一个线程调用Class.getDeclaredConstructors0,并且永远不会从它返回。另一个线程正在等待获取Permissions.implies的锁定。挂起在{{1}}上的第一个线程正在对从GAE示例文档中获取的标准PersistenceManagerFactory类进行类初始化。答案 0 :(得分:1)
答案 1 :(得分:1)
您不应该像这样使用请求初始化您的应用程序:App Engine应用程序的实例可以随时启动或关闭,App Engine将生成多个并发实例以处理任何速率的请求,因此不同VM可能会获得“初始化”调用的不同子集。