The main difference between wait() and sleep() is that wait is an
Object level method, whereas sleep() is a static method in Thread
class. A waiting thread can be woken up by another thread by
calling notify() on the monitor which is being waited on. But a
sleeping thread cannot be woken up.
A wait() and notify() has to happen within the same block that is
synchronized on the monitor object.
When we call wait() the current thread releases the monitor and
goes to waiting state. Then another thread calls notify() to wake it
up.
In case of sleep() current thread does not release the monitor or
locks. It just sleeps for some pre-defined time period.
https://www.geeksforgeeks.org/difference-between-wait-and-sleep-in-java/