Java 死锁检测及避免
一、死锁是什么
在多线程环境下,两条或者多条线程相互持有一些资源,由于竞争资源关系,导致线程堵塞,需要其他线程释放资源才能继续运行。这种情况就是死锁。
比如:ABA问题
二、检测死锁
1. jps 工具
jps(Java virtual machine process status tool)是JDK5提供的显示所有Java进程pid命令。
➜ ~ jps 79154 Launcher 77783 79309 Jps
2. jstack 工具
jstack是Java虚拟机提供的堆栈跟踪工具,jstack命令生成Java虚拟机当前时刻的线程快照。
线程快照是Java虚拟机每条线程的方法堆栈集合,目的是检查线程长时间停顿的原因,如:线程死锁、死循环、请求外部资源的长时间等待。
3. jconsole 工具
jconsole是JDK5提供的内置Java性能分析工具。