java死锁分析

1编写死锁案列,运行

1package com.thread.thread.deadLock; 2 3 4public class DeadLockTest { 5 public static String objA = "strA"; 6 public static String objB = "strB"; 7 public static void main(String[] args){ 8 Thread a = new Thread(new Lock1()); 9 Thread b = new Thread(new Lock2()); 10 a.start(); 11 b.start(); 12 } 13} 14class Lock1 implements Runnable{ 15 @Override 16 public void run(){ 17 try{ 18 System.out.println("Lock1 running"); 19 while(true){ 20 synchronized(DeadLockTest.objA){ 21 System.out.println("Lock1 lock strA"); 22 Thread.sleep(3000);//获取strA后先等一会儿,让Lock2有足够的时间锁住strB 23 synchronized(DeadLockTest.objB){ 24 System.out.println("Lock1 lock strB"); 25 } 26 } 27 } 28 }catch(Exception e){ 29 e.printStackTrace(); 30 } 31 } 32} 33class Lock2 implements Runnable{ 34 @Override 35 public void run(){ 36 try{ 37 System.out.println("Lock2 running"); 38 while(true){ 39 synchronized(DeadLockTest.objB){ 40 System.out.println("Lock2 lock strB"); 41 Thread.sleep(3000); 42 synchronized(DeadLockTest.objA){ 43 System.out.println("Lock2 lock strA"); 44 } 45 } 46 } 47 }catch(Exception e){ 48 e.printStackTrace(); 49 } 50 } 51}

  2 jps -v找到对应的线程 (对于安装了jvisualvm或者jconsole的也可以通过图形界面直接查看死锁的堆栈信息)

  

 3jstack  7312 查看死锁的相关信息

 可以看出thread-1锁住0x000000076f3b0308 等待0x000000076f3b02f0 与thread-0恰好相反

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java基础知识随身记

2018年11月12日20:51:35一、基础知识:1、JVM、JRE和JDK的区别:JVM(JavaVirtualMachine):java虚拟机,用于保证java的跨平台的特性。  java语言是跨平台,jvm不是跨平台的。JRE(JavaRuntimeEnvironment):java的运行环境,包括jvmjava的核心类

4、jstack查看线程栈信息

1、介绍利用jps、top、jstack命令找到进程中耗时最大的线程,以及线程状态等等,同时最后还可以显示出死锁的线程查找:FoundoneJavaleveldeadlock即可1、jps获得进程号!(https://oscimg.oschina.net/oscnet/da00a309fa6

Java并发编程的艺术 记录(一)

模拟死锁packagecom.gjjun.concurrent;/模拟死锁,来源于《Java并发编程的艺术》@Authorgjjun@Create2018/8/12/publicclassDeadLockDemo{