What is Deadlock in Java?

A deadlock in Java is a situation where two or more threads are permanently blocked, waiting for each other to release resources. Because each thread holds a lock that another thread needs, none of them can continue execution, and the program gets stuck.

Deadlocks are one of the most common problems in multithreaded applications.





🔹 How Deadlock Occurs?

Deadlock happens when:

  1. Thread-1 locks Resource-A and waits for Resource-B.

  2. Thread-2 locks Resource-B and waits for Resource-A.

  3. Both threads keep waiting forever.


🔹 Deadlock Example

class Test {
    public static void main(String[] args) {

        final String resource1 = "Java";
        final String resource2 = "Thread";

        Thread t1 = new Thread(() -> {
            synchronized(resource1) {
                System.out.println("Thread 1 locked resource1");

                synchronized(resource2) {
                    System.out.println("Thread 1 locked resource2");
                }
            }
        });

        Thread t2 = new Thread(() -> {
            synchronized(resource2) {
                System.out.println("Thread 2 locked resource2");

                synchronized(resource1) {
                    System.out.println("Thread 2 locked resource1");
                }
            }
        });

        t1.start();
        t2.start();
    }
}

In this example, both threads wait for each other’s lock, causing a deadlock.


🔹 Conditions Required for Deadlock

Deadlock occurs when these four conditions exist:

1️⃣ Mutual Exclusion – Resource is used by one thread at a time
2️⃣ Hold and Wait – Thread holds one resource while waiting for another
3️⃣ No Preemption – Resource cannot be forcefully taken away
4️⃣ Circular Wait – Threads wait in a circular chain


🔹 How to Prevent Deadlock?

✅ Acquire locks in the same order
✅ Avoid nested synchronization when possible
✅ Use timeout locks (tryLock() in advanced concurrency)
✅ Keep synchronized blocks small


✅ Conclusion

Deadlock is a critical issue in Java multithreading where threads stop progressing due to circular waiting. Understanding synchronization and proper lock management helps developers build stable and high-performance applications.


🔥 Promotional Content

Master multithreading, synchronization, and real-time Java concepts with practical implementation by joining the Top Java Real Time Projects Online Training in 2026.

Comments

Popular posts from this blog

What is Reflection API in Java?

Spring Boot Microservices Development

Recursion & Dynamic Programming