java - 寻找多线程死锁的原因?

标签 java multithreading concurrency deadlock

多线程应用程序卡住。也许这是由死锁引起的。如果是,那么我们如何找到死锁的原因?系统地执行此操作的任何工具和策略?

最佳答案

  1. 尽可能使用无锁数据结构,如 ConcurrentLinkedQueue .根据定义,无锁数据结构不会导致死锁。

  2. 始终以相同的顺序获取锁。如果你的资源是A、B、C,那么所有的线程都应该按照A->B->C,或者A->C,或者B->C等顺序去获取,一个线程获取到就会出现死锁它们按 A -> B -> C 的顺序获取,而另一个线程按 C -> B -> A 的顺序获取它们。

  3. 使用锁定超时 - 如果计时器到期,则线程释放其锁定。请务必在发生这种情况时进行记录,以便您可以重新检查您的锁定顺序。

  4. Use deadlock detection .

关于java - 寻找多线程死锁的原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15936725/

相关文章:

C++ VB6接口(interface)问题

go - 通过缓冲 channel (Golang) 限制并发执行进程的数量

c# - Task.Run(),传递参数给

java - 当用户发送 EOF(Ctrl-D 或 Ctrl-Z)时退出 Java 程序

生成器生成的 Python 3 队列,由多进程消耗

c - 使用 CZMQ-4.1.0 新 zsock API 更新的异步 Majordomo 模式示例不起作用

c++:互斥、守卫和函数调用

java - 对象成员变量未序列化

java - 更新对不可变对象(immutable对象)线程安全的引用

java - 为什么我的 Java Map 无法在 IntelliJ 中编译?