首页
随机
最近更改
特殊页面
社群首页
参数设置
关于WHY42
免责声明
WHY42
搜索
用户菜单
登录
欢迎来到Riguz的小站!这是一个私人wiki,用来记录一些我的笔记。
查看“︁Java:排查死锁”︁的源代码
←
Java:排查死锁
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
当多个对象互相等待对方释放锁时,可能出现死锁情况。可以通过JDK提供的工具查看死锁 <source lang="java"> public static void main(String[] args) { T1 t = new T1("A"); Thread t1 = new Thread(t); t1.start(); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } t.setA("B"); Thread t2 = new Thread(t); t2.start(); System.out.println("End"); } static class T1 implements Runnable{ String a = ""; public T1(String a){ this.a = a; } public String getA() { return a; } public void setA(String a) { this.a = a; } Object l1 = new Object(); Object l2 = new Object(); @Override public void run(){ if("A".equals(this.a)){ System.out.println("=>A"); synchronized (l1) { System.out.println("l1"); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (l2) { System.out.println("l1->l2"); } } } else if("B".equals(this.a)){ System.out.println("=>B"); synchronized (l2) { System.out.println("l2"); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (l1) { System.out.println("l2->l1"); } } } } } </source> 先通过jps命令查看java进程,找到进程号: [[Image::Jps.png|600px]] 然后通过jstack命令查看: [[Image::Jstack.png|600px]] [[Category:Programe]]
返回
Java:排查死锁
。