Difference between sleep() and wait() in Java

Learn the differences between sleep() and wait() methods in Java. Learn when to use which method and what effect they bring in Java concurrency.

1. Java sleep() and wait() – Discussion

sleep() is a method which is used to pause the process for few seconds or the time we want to. But in case of wait() method, thread goes in waiting state and it won’t come back automatically until we call the notify() or notifyAll().

The major difference is that wait() releases the lock or monitor while sleep() doesn’t releases the lock or monitor while waiting. wait() is used for inter-thread communication while sleep() is used to introduce pause on execution, generally.

Thread.sleep() sends the current thread into the “Not Runnable” state for some amount of time. The thread keeps the monitors it has acquired — i.e. if the thread is currently in a synchronized block or method no other thread can enter this block or method. If another thread calls t.interrupt(). it will wake up the sleeping thread.

While sleep() is a static method which means that it always affects the current thread (the one that is executing the sleep method). A common mistake is to call t.sleep() where t is a different thread; even then, it is the current thread that will sleep, not the t thread.

Read more : Working with wait() and notify()

2. Java sleep() and wait() – Example

synchronized(LOCK) {   
    Thread.sleep(1000); // LOCK is held
    LOCK.wait(); // LOCK is not held

Read more : Difference between yield() and join()

3. Java sleep() vs wait() – Summary

Let categorize all above points in short to remember.

3.1. Method called on

  • wait() – Call on an object; current thread must synchronize on the lock object.
  • sleep() – Call on a Thread; always currently executing thread.

3.2. Synchronized

  • wait() – when synchronized multiple threads access same Object one by one.
  • sleep() – when synchronized multiple threads wait for sleep over of sleeping thread.

3.3. Lock duration

  • wait() – release the lock for other objects to have chance to execute.
  • sleep() – keep lock for at least t times if timeout specified or somebody interrupt.

3.4. wake up condition

  • wait() – until call notify(), notifyAll() from object
  • sleep() – until at least time expire or call interrupt().

3.5. Usage

  • sleep() – for time-synchronization
  • wait() – for multi-thread-synchronization.

Hope above information will add some value in your knowledge-base.

Happy Learning !!

Thread sleep method Java doc
Object wait() method Java doc


Notify of
Most Voted
Newest Oldest
Inline Feedbacks
View all comments

About Us

HowToDoInJava provides tutorials and how-to guides on Java and related technologies.

It also shares the best practices, algorithms & solutions and frequently asked interview questions.

Our Blogs

REST API Tutorial

Dark Mode

Dark Mode