Linux -- 解决死锁问题

  • 使用管理员权限执行命令(因为我的.java文件是由管理员创建的);在这里插入图片描述
  • 使用 jps 命令查询进程ID,jstack 命令查询进程的堆栈信息;
    在这里插入图片描述
  • 找到 waitingwait for字段;
    Linux -- 解决死锁问题_第1张图片Linux -- 解决死锁问题_第2张图片
    Linux -- 解决死锁问题_第3张图片
  • 根据指引找寻 .java文件中的对应行,并根据具体情况解决死锁
    Linux -- 解决死锁问题_第4张图片Linux -- 解决死锁问题_第5张图片
    总结
  • jstack打印java进程所有线程的调用栈信息+相应的源代码的分析;
  • 寻找 wait for… + 等待的锁资源的地址waiting to lock…+等待的锁资源的地址
  • 如果是死锁问题,会发现多个线程都进入的waiting状态,调用栈信息最上面都会显示如wait forwaiting to lock这样的关键字,表示 当前线程在等待一个无法获取的锁资源;
  • 此时结合调用栈信息和代码,具体分析这把锁还在那里获取过?为什么释放不了?

你可能感兴趣的:(Java)