java 死锁

Posted 穿林度水

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 死锁相关的知识,希望对你有一定的参考价值。

死锁检测方法

1 JConsole 找到需要查看的进程,打开线程选项卡,点击检测死锁

2 jps查看java进程ID,使用jstack  7412输出信息

3 使用jvisualvm连接java虚拟机,查看线程检测死锁

解决方法:

  四个条件打破一个即可,但是代价不同,最简单的编码就是顺序加锁和解锁

现在我们介绍下如何避免死锁的几个常见方法。《java变发编程的艺术》

  • 避免一个线程同时获取多个锁。
  • 避免一个线程在锁内同时占用多个资源,尽量保证每个锁只占用一个资源。
  • 尝试使用定时锁,使用tryLock(timeout)来替代使用内部锁机制。
  • 对于数据库锁,加锁和解锁必须在一个数据库连接里,否则会出现解锁失败。

检测CPU使用过高:http://flysnowxf.iteye.com/blog/1162691

  TOP找出Cpu使用高的进程,这里我们分析21125这个java进程。

  先输入top -p 21125,然后再按shift+h。这里意思为只查看21125的进程,并且显示线程。

  jstack查找这个线程的信息

 

Java自带的性能监测工具用法简介——jstack、jconsole、jinfo、jmap、jdb、jsta、jvisualvm

http://blog.csdn.net/feihong247/article/details/7874063#

jstack

jstack 是一个可以返回在应用程序上运行的各种各样线程的一个完整转储的实用程序,您可以使用它查明问题。jstack [-l] <pid>,jpid可以通过使用jps命令来查看当前Java程序的jpid值,-l是可选参数,它可以显示线程阻塞/死锁情况。

 

以上是关于java 死锁的主要内容,如果未能解决你的问题,请参考以下文章

java多线程死锁及死锁问题排查

Java多线程死锁问题

Java 死锁范例以及如何分析死锁

Java死锁及死锁的避免

怎么处理JAVA多线程死锁问题?

java 死锁