关闭

死锁小示例与检查方法

标签: 死锁多线程jstackjpsjconsole
122人阅读 评论(0) 收藏 举报
分类:

1. 写代码构建个死锁场景;  2. 如何判断程序死锁


好吧,基础知识不牢固,先引入一个链接温故而知新

http://www.360doc.com/content/11/0904/13/834759_145686705.shtml


下面是写的一个demo,和调试的过程,仅供参考

死锁示例代码与main方法

public class DeadLock {
	private int i;
	private Object lock1 = new Object();
	private Object lock2 = new Object();

	public int plus() {
		synchronized (lock1) {
			System.out.println("plus get lock1 ... ...");
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			synchronized (lock2) {
				System.out.println("plus get lock2 ... ...");
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				return i++;
			}
		}
	}

	public int minus() {
		synchronized (lock2) {
			System.out.println("minus get lock2 ... ...");
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			synchronized (lock1) {
				System.out.println("minus get lock1 ... ...");
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				return i--;
			}
		}
	}

	

	
	
	public static void main(String[] args) {
		DeadLock d = new DeadLock();
		TestPlus tp = new TestPlus(d);
		TestMinus tm = new TestMinus(d);
		tp.start();
		tm.start();
	}
}

执行加法的线程

public class TestPlus extends Thread {
	private DeadLock deadLock;

	@Override
	public void run() {
		deadLock.plus();
	}

	public TestPlus(DeadLock deadLock) {
		this.deadLock = deadLock;
	}

}
执行减法的线程

public class TestMinus extends Thread {
	private DeadLock deadLock;

	@Override
	public void run() {
		deadLock.minus();
	}

	public TestMinus(DeadLock deadLock) {
		this.deadLock = deadLock;
	}
}

main执行结果


卡住不动了,死锁了,检查方式如下


使用jps命令查看当进程号



方法一:

jconsole [pid] 打开如下页面


点击检测死锁,可以看到两个线程栈信息,排查错误




方法二:使用jstack -l [pid] 查看栈信息,可以看到有这样一条内容,能够找到死锁的位置:


简单使用~对于其他排查情况都是类似的,注意检查死锁的几个条件~

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:266次
    • 积分:32
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档