java当中的死锁

1、产生死锁的原因就是出现了线程的相互等待,等待同步锁的释放;

如下图:

public class DeadLock {

	final Object lockA = new Object();
	final Object lockB = new Object();
	
	public static void main(String[] args) {
		DeadLock demo = new DeadLock();
		demo.startLock();
	}
	
	public void startLock(){
		ThreadA a= new ThreadA(lockA,lockB);
		ThreadB b= new ThreadB(lockA,lockB);
		
		//start threads
		a.start();
		b.start();
	}

}

class ThreadA extends Thread{

	private Object lockA = null;
	private Object lockB = null;
	
	public ThreadA(Object a, Object b){
		this.lockA = a;
		this.lockB = b;
	}

	public void run() {
		synchronized (lockA) {
			System.out.println("*** Thread A: ***: Lock A" );
			try {
				sleep(3000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			synchronized (lockB) {
				System.out.println("*** Thread A: ***: Lock B" );
			}
		}
		
		System.out.println("*** Thread A: ***: Finished" );
	}
	
}

class ThreadB extends Thread{

	private Object lockA = null;
	private Object lockB = null;
	
	public ThreadB(Object a, Object b){
		this.lockA = a;
		this.lockB = b;
	}
	public void run() {
		synchronized (lockB) {
			System.out.println("*** Thread B: ***: Lock B" );
			try {
				sleep(3000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			synchronized (lockA) {
				System.out.println("*** Thread B: ***: Lock A" );
			}
		}	
		
		System.out.println("*** Thread B: ***: Finished" );
	}
	
}










3、在window系统中 可以运行并且编译该类,这时同时按下 Ctrl+break键就会报死锁的日志说明;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值