Deadlock and Starvation in Java - GeeksforGeeks

24 Mar, 2022
Deadlock: Deadlock is a situation when two threads are waiting for each other and the waiting never ends. Here both threads cant completes their tasks. 
JAVA
// Java program to illustrate Deadlock situationclass DeadlockDemo extends Thread {    static Thread mainThread;    public void run()    {        System.out.println("Child Thread waiting for" +                          " main thread completion");        try {             // Child thread waiting for completion            // of main thread            mainThread.join();        }        catch (InterruptedException e) {            System.out.println("Child thread execution" +                                           " completes");        }    }    public static void main(String[] args)                   throws InterruptedException    {        DeadlockDemo.mainThread = Thread.currentThread();        DeadlockDemo thread = new DeadlockDemo();         thread.start();        System.out.println("Main thread waiting for " +                            "Child thread completion");         // main thread is waiting for the completion        // of Child thread        thread.join();         System.out.println("Main thread execution" +                                      " completes");    }}
Output:  
Main thread waiting for Child thread completion
Child Thread waiting for main thread completion
Starvation:In Starvation, threads are also waiting for each other. But here waiting time is not infinite after some interval of time, waiting thread always gets the resources whatever is required to execute thread run() method. 
JAVA
// Java program to illustrate Starvation conceptclass StarvationDemo extends Thread {    static int threadcount = 1;    public void run()    {        System.out.println(threadcount + "st Child" +                            " Thread execution starts");        System.out.println("Child thread execution completes");        threadcount++;    }    public static void main(String[] args)               throws InterruptedException    {        System.out.println("Main thread execution starts");         // Thread priorities are set in a way that thread5        // gets least priority.        StarvationDemo thread1 = new StarvationDemo();        thread1.setPriority(10);        StarvationDemo thread2 = new StarvationDemo();        thread2.setPriority(9);        StarvationDemo thread3 = new StarvationDemo();        thread3.setPriority(8);        StarvationDemo thread4 = new StarvationDemo();        thread4.setPriority(7);        StarvationDemo thread5 = new StarvationDemo();        thread5.setPriority(6);         thread1.start();        thread2.start();        thread3.start();        thread4.start();         // Here thread5 have to wait because of the        // other thread. But after waiting for some        // interval, thread5 will get the chance of        // execution. It is known as Starvation        thread5.start();         System.out.println("Main thread execution completes");    }}
Output:  
Main thread execution starts
1st Child Thread execution starts
Child thread execution completes
2st Child Thread execution starts
Child thread execution completes
3st Child Thread execution starts
Child thread execution completes
4st Child Thread execution starts
Child thread execution completes
Main thread execution completes
5st Child Thread execution starts
Child thread execution completes
 
adnanirshad158
jordandegea
Java-Multithreading
Java
Java
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Stream In Java
Different ways of Reading a text file in Java
Constructors in Java
Exceptions in Java
Generics in Java
Functional Interfaces in Java
Comparator Interface in Java with Examples
HashMap get() Method in Java
Introduction to Java
Difference between Abstract Class and Interface in Java