• August 29, 2014
  • Core Java
  • Comments Off on Deadlock in java

Deadlock in java

Deadlock:

when n threads are in waiting state in such a way that thread1 is waiting for some resource which is held by thread2 and thread2 is waiting for some resource held by thread3 and so on thread n is waiting for some resources held by thread1, this situation when all threads are in waiting state and no thread release the lock because it is also in waiting state is known as deadlock.

Diagram:

dead lock

Example:

DeadLockExample.java

/**
 * This program is used to show deadlock situation in multithreading.
 * @author javawithease
 */
public class DeadLockExample {
	public static void main(String[] args) {  
	    final String resource1 = "Amani";  
	    final String resource2 = "Nidhi";
	    final String resource3 = "Prabhjot";
 
	    Thread thread1 = new Thread() {  
	      public void run() {  
	    	  //thread1 tries to lock on resource1.  
	          synchronized (resource1) {  
	           System.out.println("Thread1 locked resource1: " + resource1);  
 
	           try { 
	        	   Thread.sleep(500);
	        	   } catch (Exception e) {
	        		   System.out.println(e);
	        	   }  
	           //thread1 tries to lock on resource2.  
	           synchronized (resource2) {  
	            System.out.println("Thread2 locked resource2: " + resource2);  
	           } 
 
	           //thread1 tries to lock on resource3.  
	           synchronized (resource2) {  
	            System.out.println("Thread2 locked resource3: " + resource3);  
	           } 
	         }  
	      }  
	    };  
 
	    Thread thread2 = new Thread() {  
	      public void run() {  
	    	//thread1 tries to lock on resource2.  
	          synchronized (resource2) {  
	           System.out.println("Thread1 locked resource2: " + resource2);  
 
	           try { 
	        	   Thread.sleep(500);
	        	   } catch (Exception e) {
	        		   System.out.println(e);
	        	   }  
	           //thread1 tries to lock on resource1.  
	           synchronized (resource1) {  
	            System.out.println("Thread2 locked resource1: " + resource1);  
	           } 
 
	           //thread1 tries to lock on resource3.  
	           synchronized (resource3) {  
	            System.out.println("Thread2 locked resource3: " + resource3);  
	           } 
	         }  
	      }  
	    };  
 
	    Thread thread3 = new Thread() {  
		      public void run() {  
		    	//thread1 tries to lock on resource3.  
		          synchronized (resource3) {  
		           System.out.println("Thread1 locked resource3: " + resource3);  
 
		           try { 
		        	   Thread.sleep(500);
		        	   } catch (Exception e) {
		        		   System.out.println(e);
		        	   }  
		           //thread1 tries to lock on resource1.  
		           synchronized (resource1) {  
		            System.out.println("Thread2 locked resource1: " + resource1);  
		           } 
 
		           //thread1 tries to lock on resource2.  
		           synchronized (resource2) {  
		            System.out.println("Thread2 locked resource2: " + resource2);  
		           } 
		         }  
		      }  
		    };  
 
	    //start threads.  
	    thread1.start();  
	    thread2.start();
	    thread3.start();
	  }  
}

Output:

Thread1 locked resource3: Prabhjot
Thread1 locked resource2: Nidhi
Thread1 locked resource1: Amani

Download this example.
 
Next Topic: Starvation in java with example.
Previous Topic: Difference between Thread.yield() and Thread.sleep() methods.

Related Topics:

Multithreading in java.
Thread life cycle in java.
Way of creating thread in java.
Commonly used methods of Thread class.
Thread scheduling in java with example.
Thread priority in java with example.
Naming a thread in java with example.
Joining a thread in java with example.
Daemon thread in java with example.
Can we start a thread twice?
Can we call run method directly?
Difference between Thread.yield() and Thread.sleep() methods.
Deadlock in java with example.
Starvation in java with example.
Inter-thread communication in java with example.
Synchronization in java with example.
Synchronized method in java with example.
Static synchronization in java with example.
Synchronized block in java with example.

 


Comments are closed.