Java Does wait release lock from synchronized block
Interview Questions practice on Codemia
Over 8,000 real interview questions from top companies, searchable by company and role.
Java, a widely-used programming language known for its versatility and portability, provides robust support for concurrent programming. One of the key concepts when dealing with concurrency in Java is synchronization and how threads interact with shared resources. This article delves into an important question: Does the wait()
method release the lock from a synchronized block? We will explore this in detail and provide technical explanations and examples.
Synchronization in Java
In Java, synchronization is a mechanism that is used to control access to a block of code or an object across multiple threads. It ensures that only one thread can access the synchronized block or method at any given time, preventing thread interference and ensuring consistency.
Synchronized Method vs Synchronized Block
- Synchronized Method: When a method is declared with the
synchronizedkeyword, the intrinsic lock (or monitor lock) of the object is acquired by the current thread before executing the method. - Synchronized Block: This is a more granular level of synchronization where you can target specific code blocks to be synchronized. The lock is acquired for the object specified in the block.
The wait()
Method
The wait()
method in Java is part of the Object
class and is used in conjunction with notification methods (notify()
, notifyAll()
) to achieve inter-thread communication. When a thread calls wait()
, it goes into a waiting state until another thread calls notify()
or notifyAll()
on the same object.
Does wait()
Release Lock?
Yes, when a thread calls the wait()
method within a synchronized block or method, it releases the lock it holds on that object. This is a crucial aspect that allows other threads to enter synchronized blocks that are guarded by that object’s lock.
Technical Explanation & Example
Below is an example demonstrating the behavior of wait()
and how it releases the lock:
Related reading
- Java Equivalent of C async/await?
- Java executors how to be notified, without blocking, when a task completes?
- Java Future vs c async await
- Java FutureTask Exception
- Java EE EJB 3.0 Glassfish
- Java enum - why use toString instead of name
- Java IO vs NIO vs Tasks queue
- Java Is volatile / final required for reference to synchronized object?

OOD Fundamentals
Master object-oriented design from first principles, SOLID, design patterns, and classic interview problems with hands-on coding.
View the courseTrack what you have practised
A free account saves your progress, solutions and study plan across every problem on Codemia.
Interview Questions practice on Codemia
Over 8,000 real interview questions from top companies, searchable by company and role.