多线程应用程序卡住。也许这是由死锁引起的。如果是,那么我们如何找到死锁的原因?系统地执行此操作的任何工具和策略?
最佳答案
尽可能使用无锁数据结构,如 ConcurrentLinkedQueue .根据定义,无锁数据结构不会导致死锁。
始终以相同的顺序获取锁。如果你的资源是A、B、C,那么所有的线程都应该按照A->B->C,或者A->C,或者B->C等顺序去获取,一个线程获取到就会出现死锁它们按 A -> B -> C 的顺序获取,而另一个线程按 C -> B -> A 的顺序获取它们。
使用锁定超时 - 如果计时器到期,则线程释放其锁定。请务必在发生这种情况时进行记录,以便您可以重新检查您的锁定顺序。
关于java - 寻找多线程死锁的原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15936725/