文档章节

多线程死锁分析

fokYaland
 fokYaland
发布于 2015/06/04 17:26
字数 339
阅读 12
收藏 1
编写下面代码,用于演示死锁情况:

public   class   ThreadDeadlock {
       public   static   void   main(String[] args)   throws   InterruptedException {
            Object obj1 =   new   Object();
            Object obj2 =   new   Object();
            Object obj3 =   new   Object();
            
            Thread t1 =   new   Thread(   new   SyncThread(obj1, obj2),   "t1" );
        Thread t2 =   new   Thread(   new   SyncThread(obj2, obj3),   "t2" );
        Thread t3 =   new   Thread(   new   SyncThread(obj3, obj1),   "t3" );
 
        t1.start();
        Thread.sleep(5000);
        t2.start();
        Thread.sleep(5000);
        t3.start();
      }
}
class   SyncThread   implements   Runnable {
       private   Object   obj1 ;
       private   Object   obj2 ;

       public   SyncThread(Object obj1, Object obj2) {
               this .   obj1   = obj1;
               this .   obj2   = obj2;
      }
       @Override
       public   void   run() {
            String name = Thread. currentThread().getName();
            System.   out .println(name +   "申请锁:" + obj1   );
               synchronized   (   obj1 ) {
                  System.   out .println(name +   "获取锁:" + obj1   );
                  work();
                  System.   out .println(name +   "申请锁:" + obj2   );
                     synchronized   (   obj2 ) {
                        System.   out .println(name +   "获取锁:" + obj2   );
                        work();
                  }
                  System.   out .println(name +   "释放锁:" + obj2   );
            }
            System.   out .println(name +   "释放锁:" + obj1   );
            System.   out .println(name +   "运行结束" );
      }
      
       private   void   work(){
               try   {
                  Thread. sleep(30000);
            }   catch   (InterruptedException e) {
                  e.printStackTrace();
            }
      }
}

执行上面的程序时,就产生了输出,但是程序却因为死锁无法停止
t1申请锁:java.lang.Object@1d87b360
t1获取锁:java.lang.Object@1d87b360
t2申请锁:java.lang.Object@47bb2cb
t2获取锁:java.lang.Object@47bb2cb
t3申请锁:java.lang.Object@653e4653
t3获取锁:java.lang.Object@653e4653
t1申请锁:java.lang.Object@47bb2cb
t2申请锁:java.lang.Object@653e4653
t3申请锁:java.lang.Object@1d87b360

要分析线程执行情况,需要用工具 dump 线程信息。可以使用   VisualVM  (http://visualvm.java.net/)
运行 VisualVM,直接右键就可以Dump



如果在linux 上 可以用jdk 提供 jstack 工具:
ps -eaf|grep java    找到PID
jstack 26444 >> ~/a.dump

参考文章:
http://www.importnew.com/9668.html
http://www.journaldev.com/1053/how-to-generate-thread-dump-in-java


本文转载自:http://blog.csdn.net/yanliang1/article/details/19905501

fokYaland
粉丝 4
博文 68
码字总数 3062
作品 0
东城
私信 提问
使用JDK自带的工具jstack找出造成运行程序死锁的原因

Java多线程编程也是Java面试中经常考察的内容。刚接触Java多线程编程的朋友们,可能会不慎写出一些会导致死锁(deadlock)的应用出来。如何分析造成Java多线程的原因呢?很多时候我们在怀疑造成...

全部原谅
2018/08/28
0
0
多线程4000W数据存储ORACLE出现死锁 场景 对客户进行风险测评

多线程4000W数据存储ORACLE出现死锁 场景 对客户进行风险测评,客户量比较大,测评的话是根据客户的一些基本信息、交易信息去计算分数,比如倘若同一个客户某段时间内的交易次数超过5次,逻辑...

天池番薯
2018/11/20
43
0
记一次升级Oracle驱动引发的死锁

问题描述 近期项目需要从虚拟机环境迁移到容器环境,其中有一个项目在迁移到容器环境之后的两天之内出现了2次“死锁(deadlock)”的问题,部分关键日志如下: 日志还是挺明显的,线程Default...

ksfzhaohui
04/24
0
0
多线程4000W数据存储ORACLE出现死锁

@局长 你好,想跟你请教个问题: 场景 对客户进行风险测评,客户量比较大,测评的话是根据客户的一些基本信息、交易信息去计算分数,比如倘若同一个客户某段时间内的交易次数超过5次,逻辑判...

桑科
2018/11/20
110
3
Java线程面试问题

在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分。那么你就应该准备很多关于多线程的问题,一般面试官只是想确信面试者有足够的Java线程与并发方面的知识,因为候选人中有很多...

沧海为水
2016/11/28
127
0

没有更多内容

加载失败,请刷新页面

加载更多

好程序员web前端分享逻辑运算

  一门计算机语言,编程的核心在于逻辑思想,当我们在编写程序的时候,逻辑是否通顺,是能否正确写出程序的关键,可以说如果你掌握了逻辑,那么你就踏入了计算机编程的大门。 &&与 || 或 ...

好程序员IT
22分钟前
1
0
我的Linux系统开始学习的过程

我的Linux系统开始学习的过程 Linux系统,不知大家是否了解。接触计算机不多或对计算机不感冒的人可能对其比较陌生,曾经的我也是。上大学前的我的确对Linux一无所知,那时候接触面窄,都没有...

linuxCool
22分钟前
1
0
让自己的网站可以被搜索

第一步:先注册一个属于自己的域名,这个域名是独一无二的。推荐到主机屋注册一个,其实在哪里注册都是一样的,但是主机屋提供免费的地址解析服务(只对在主机屋注册的域名免费)。 主机屋官...

WinkJie
25分钟前
2
0
全站加速(DCDN)- IP应用加速产品解读

5月22日下午15点,阿里云全站加速(DCDN)-IP应用加速如期发布。IP应用加速是阿里云自主研发的一款更高效、更安全、更便捷的动态加速产品,结合阿里云CDN本身的资源优势,利用就近接入、智能...

阿里云官方博客
28分钟前
1
0
k8s常用命令

1.创建deployment资源kubectl apply -f nginx.yml2.删除deployment资源kubectl delete -f nginx.yml3.查看deployment资源基本信息deployment资源(运行的服务资源)kubectl get...

平头哥-Enjoystudy
28分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部