jstack发现多线程死锁
在多线程的使用中,有时会碰到死锁,死锁会造成应用程序阻塞,浪费系统资源。下面探讨如何发现和解决死锁:
产生死锁
首先先写一段能够产生死锁的代码:
1 | private static Object lock1=new Object(); |
运行上面的结果,线程会各自阻塞在同步锁的那个地方,产生了死锁,运行结果如下:
1 | 线程1获得 lock1 |
我们使用jps
命令, 查询Java
的线程,如下:
使用jstack 16071
命令查看堆栈信息
从上面可以看出来,两个线程都在等待一个内存地址,这个就是我们的死锁
You need to set
install_url
to use ShareThis. Please set it in _config.yml
.