Contents

1 code
1.1 TestDeadLock.java
1.2 Lock.java
1.3 ThreadA.java
1.4 ThreadB.java
2 result

1 code #

1.1 TestDeadLock.java #

public class TestDeadLock
{
	public static void main(String[] args)
	{
		Lock l1 = new Lock();
		Lock l2 = new Lock();
		ThreadA ta = new ThreadA(l1, l2);
		ThreadB tb = new ThreadB(l1, l2);
		ta.start();
		tb.start();
	}
}


1.2 Lock.java #

public class Lock
{
}


1.3 ThreadA.java #

public class ThreadA extends Thread
{
	private Lock lock1;
	private Lock lock2;
	
	public ThreadA(Lock lock1, Lock lock2)
	{
		this.lock1 = lock1;
		this.lock2 = lock2;		
	}
	
	public void run()
	{
		synchronized(lock1){
			
			System.out.println("A got lock : lock1");
			try{
				sleep(1000);
			}
			catch(Exception e){}
			
			synchronized(lock2){
				System.out.println("A got lock : lock2");
			}
		}
	}
}

1.4 ThreadB.java #

public class ThreadB extends Thread
{
	private Lock lock1;
	private Lock lock2;
	
	public ThreadB(Lock lock1, Lock lock2)
	{
		this.lock1 = lock1;
		this.lock2 = lock2;		
	}
	
	public void run()
	{
		synchronized(lock2){
			
			System.out.println("B got lock : lock2");
			try{
				sleep(1000);
			}
			catch(Exception e){}
			
			synchronized(lock1){
				System.out.println("B got lock : lock1");
			}
		}
	}
}




2 result #

A got lock : lock1
B got lock : lock2
<dead block>
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2008-08-27 17:32:32
Processing time 0.0081 sec