死锁小示例与检查方法

原创 2015年07月09日 11:13:18

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] 查看栈信息,可以看到有这样一条内容,能够找到死锁的位置:


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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

关于数据库死锁的检查方法

关于数据库死锁的检查方法 一、        数据库死锁的现象 程序在执行的过程中,点击确定或保存按钮,程序没有响应,也没有出现报错。 二、       ...

关于数据库死锁的检查方法

关于数据库死锁的检查方法 一、         数据库死锁的现象 程序在执行的过程中,点击确定或保存按钮,程序没有响应,也没有出现报错。 二、      ...

教您如何检查oracle死锁

  • 2012-01-06 20:38
  • 108KB
  • 下载

Java 死锁示例性源代码

进程的死锁及其预防,检查,恢复

转自:http://www.mmrtvu.gd.cn/grzy/os/jiaoxue/jiaocai801.htm#jiaocai81 一、要点提示 (1) 掌握死锁的概念和产生死锁的根本原因...

SQL Server 检查死锁

找出什么被锁定了 系统的反应迟缓意味着你应该做一些调查了。你的查找最好从测定系统发生锁定的数量和频率开始。如果你的系统环境处理事务性很高的话,这样各个应用程序争夺资源就会很常见,从而引起锁定。解决这...

用 sys.sysprocesses 检查 Sql Server的阻塞和死锁

Sys.SysProcesses 系统表是一个很重要的系统视图,主要用来定位与解决Sql Server的阻塞和死锁。 MSDN:包含正在 SQL Server 实例上运行的进程的相关信息。这...
  • wxzyq
  • wxzyq
  • 2011-11-13 10:24
  • 525

并发(九):检查死锁与Locked ownable synchronizers

通过jstack可快速检查线程的死锁信息,用法如下:# 获取JVM ID(JAVA 进程ID),通过参数lv可以获取更详细的JAVA方法调用信息 jps -lv # 得到JVM ID后,执行jstac...

DB2检查死锁和解锁的命令(AIX系统)

在交易量比较大的系统上经常由于程序原因或者数据库配置参数不当导致死锁发生。在交易高峰期,检查易发生死锁的表就很有必要。 常用命令如下: 1.检查监视器开关是否打开: db2 get monitor...

SQL Server死锁的解除方法

  • 2014-12-11 09:32
  • 20KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)