Avoid Deadlock in Java

 

Image for post

Java programming language supports multithreading. It involves multiple threads running simultaneously for multitasking. But in certain cases or due to certain shortcomings, the threads find themselves in the waiting state forever. In this article, We will understand the deadlock condition in Java and different ways to avoid it. The following are the topics discussed in this article:

  • What is Deadlock in Java?
  • Deadlock Example
  • How To Avoid Deadlock in Java?

What is Deadlock in Java?

Deadlock in Java is a condition where two or more threads are blocked forever, waiting for each other.

This usually happens when multiple threads need the same locks but obtain them in different orders. Multithreaded Programming in Java suffers from the deadlock situation because of the synchronized keyword.

It causes the executing thread to block while waiting for the lock, or monitor, associated with the specified object.

Image for post

Deadlock Example

public class Example
{
public static void main(String[] args)
{
final String r1 = "edureka";
final String r2 = "java";
Thread t1 = new Thread()
{
public void run()
{
synchronized(r1)
{
System.out.println("Thread 1: Locked r1");
try
{ Thread.sleep(100);} catch(exception e) {}
synchronized(r2)
{
System.out.println("Thread 1: Locked r2");
}
}
}
};
Thread t2 = new Thread()
{
public void run()
{
synchronized(r1)
{
System.out.println("Thread 2: Locked r1");
try{ Thread.sleep(100);} catch(exception e) {}
synchronized(r2)
{
System.out.println("Thread 2: Locked r2");
}
}
}
};
t1.start();
t2.start();
}
}


Thread 1: Locked r1
Thread 2: Locked r2

How To Avoid Deadlock in Java?

Although it is not completely possible to avoid deadlock condition, but we can follow certain measures or pointers to avoid them:

  •  — You must avoid giving locks to multiple threads, this is the main reason for a deadlock condition. It normally happens when you give locks to multiple threads.
  •  — The locks should be given to the important threads. Giving locks to the unnecessary threads that cause the deadlock condition.
  •  — A deadlock usually happens when one thread is waiting for the other to finish. In this case, we can use Thread.join with a maximum time that a thread will take.

This brings us to the end of this article where we have learned about the deadlock in Java and how to avoid it. I hope you are clear with all that has been shared with you in this tutorial.

Comments

Popular posts from this blog

Nginx

AWS Configuration For RDS(postgres),ElastiCache(Redis) with ElasticBean

Use @Initbinder in Spring MVC

CSRF Protection using Synchronizer Tokens

How to read Dates with Hibernate

CSRF Protection using Double Submitted Cookies

Add Logging Messages in Spring 5.1 - All Java Config Version

The TRUE difference between [] and {{}} bindings in Angular

Hibernate and Primary Keys