|
|
1
2
提供的线程跟踪相对于所讨论的锁是完整的。与我一起工作的另外两个人同意JVM故障是明确指示的,jProfiler(ej-technologies)的程序员也是如此。 |
|
|
2
1
您确定已通知线程RelayedMessages-0000000001吗?其他线程被阻塞是正常的,因为第一个线程仍然获得<0x12a8f9f8>;为了使其他线程能够获得锁,应将第一个线程从等待列表中删除,并计划再次运行,然后释放它获得的锁。 可能还有其他线程在等待第一个线程等待的同一对象,当你说通知时,这些线程被选择唤醒。如果可能的话,请确保使用notifyAll()。 也可以在将线程放入等待列表之前释放锁,或者通过给出超时值来调用wait。线程在等待列表中等待16小时是没有意义的。如果你也能发布其他帖子,那也会很有帮助。 更新: 你说得对,我应该考虑一下线索。国家。正如您所评论的,由于已收到通知,因此它不处于等待状态。在等待名单中不是不解锁的原因<0x12a8f9f8>;那么。然而,它处于阻塞状态。这意味着,它正在尝试获取在object.wait之前获得的锁,但它不能。因此,似乎有另一个线程(不在您提供的列表中)阻止了它。 我想,你在想对象。wait应该把锁打开<0x12a8f9f8>;.但是object.wait只释放该对象监视器上的锁,并保留其他锁。我想,锁<0x12a8f9f8>;不是对象监视器的锁(需要等待) 当然,情况可能并非如此,而且可能存在真正的错误。我只是想找出可能的原因。 |