CodesJava

Easy learning with example program codes

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 codesjava
 */
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:

Please follow and like us:
Posted in Java   

Core Java Tutorial



Copyright © 2019 CodesJava DMCA.com Protection Status SiteMap Reference: Java Wiki