Home » Java programming language

What is Deadlock, how to analyze and avoid it in java?

In this article, we are going to learn about Deadlock in java - What is deadlock and how to analyze and avoid deadlock situation?
Submitted by Preeti Jain, on February 15, 2018

Deadlock in java

  • When two threads are waiting for each other forever means (i.e. it does not get a chance to enter in a ready queue) such type of infinite waiting is called deadlock.
  • A deadlock occurs when the waiting process is still holding onto another resource that the first needs before it can finish.
  • By using synchronized keyword we may move towards deadlock situation. Synchronize keyword is not recommended to apply unnecessarily.
  • We cannot resolve deadlock but we can avoid deadlock situation based on several techniques.

How can we analyze deadlock situation?

  • If all threads have only one object then we can use a graph called wait-for-graph.
  • If there are multiple objects for a single thread as a cycle then wait-for-graph won't work then we should go for such a solution like banker's algorithm in operating system to detect a deadlock.

In the given example, below we will see the situation of deadlock:

Example:

class HelloClass{
	public synchronized void first(HiClass hi)
	{
		try{
			Thread.sleep(1000);
		}
		catch(InterruptedException ie){}
		System.out.println(" HelloClass is calling 	HiClass second() method");
		hi.second();
	}

	public synchronized void second(){
		System.out.println("I am inside second method of HelloClass");
	}
}

class HiClass{
	public synchronized void first(HelloClass he)
	{
		try{
			Thread.sleep(1000);
		}
		catch(InterruptedException ie){}
		System.out.println(" HiClass is calling HelloClass second() method");
		he.second();
	}

	public synchronized void second(){
		System.out.println("I am inside second method of HiClass");
	}
}

class DeadlockClass extends Thread{
	HelloClass he = new HelloClass();
	HiClass hi = new HiClass();

	public void demo(){
		this.start();
		he.first(hi);
	} 
	public void run(){
		hi.first(he);
	}

	public static void main(String[] args){
		DeadlockClass dc = new DeadlockClass();
		dc.demo();
	}
}

Output

D:\Java Articles>java DeadlockClass
HelloClass is calling HiClass second() method
HiClass is calling HelloClass second() method


Comments and Discussions!

Load comments ↻





Copyright © 2024 www.includehelp.com. All rights reserved.