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键就会报死锁的日志说明;


猜你喜欢

转载自blog.csdn.net/liangwanmian/article/details/79263933