Java代码测试线程死锁 用jvisualvm监控

来源:互联网 发布:淘宝账号注册不了 编辑:程序博客网 时间:2024/05/22 03:07

测试线程死锁,运行以下代码:

public class Test1 {private static Object o1 = new Object();private static Object o2 = new Object();public static void main(String[] args) {for( int i = 0;i<100;i++){new Thread(new Runnable() {@Overridepublic void run() {synchronized (o1) {synchronized (o2) {System.out.println("am o1");}}}}).start();new Thread(new Runnable() {@Overridepublic void run() {synchronized (o2) {synchronized (o1) {System.out.println("am o2");}}}}).start();}}}
  代码中线程1先申请obj1,再申请obj2;线程2先申请obj2,再申请obj1。如果执行次数多了就会出现死锁,我们依然来看线程的监控台: 
在jdk中 C:\Program Files\Java\jdk1.8.0_101\bin目录下有jvisualvm.exe工具

运行以上代码 查看线程,如下图所示:

选择一个线程进行dump查看;可以查看出死锁的具体原因,可利用此工具查看程序中那些线程死锁,从而更好的排查错误。



原创粉丝点击