Java program on Deadlock
Before Checking Deadlock Program in java Lets Understand the meaning of Deadlock in Java
What is Deadlock in Java?
Deadlock in java is a part of multi threading. Deadlock can occur in a situation when a thread is waiting for an object lock, that is acquired by another thread and second thread is waiting for an object lock that is acquired by first thread. Since, both threads are waiting for each other to release the lock, the condition is called deadlock.
Java Keywords that are synchronized are to make class thread-safe which means only one of the method has the lock of the synchronized method which can use it.
If the program that we are operating is running in a multi-threaded environment where two or more than two of the threads are working together. But this is not mandatory to work all the time this type of problem is called Deadlock in Java.
Here is Example of Java Program on Deadlock
class Resource { int sum; synchronized void sumCalc () { String tname = Thread.currentThread().getName() ; System.out.println(tname + " is starting to calculate the sum ....." ); for(int i = 1 ; i<= 10 ; i++) { int x = (int ) (Math.random() *100 ); sum+=x ; } System.out.println("sum of " + tname + " : " +sum); if(tname.equals ("first")) { System.out.println(tname + "is getting sum of the other thread ....."); int otherSum = Factory.r2.getSum() ; int total = sum + otherSum ; System.out.println("total sum in "+ tname + " = "+total ); } if(tname . equals ("second")) { System.out.println(tname + "is getting sum of the other thread ....."); int otherSum = Factory.r1.getSum() ; int total = sum + otherSum ; System.out.println("total sum in "+ tname + " = "+total ); } } synchronized int getSum() { return (sum ); } } class Factory { static Resource r1,r2 ; static {r1 = new Resource(); r2 = new Resource() ; } } class MyThread extends Thread { MyThread (String name ) { super (name ); start() ; } public void run () { String tname = getName () ; if(tname.equals ("first")) { Factory.r1.sumCalc() ; } if(tname.equals ("second")) { Factory.r2.sumCalc() ; } } } class DeadlockTest { public static void main(String s[] ) { new MyThread ("first"); new MyThread ("second"); } }