If Thread.sleep(...)
is called when the current thread holds a lock, it could lead to performance and scalability issues, or even
worse to deadlocks because the execution of the thread holding the lock is frozen. It’s better to call wait(...)
on the monitor object to
temporarily release the lock and allow other threads to run.
public void doSomething(){ synchronized(monitor) { while(notReady()){ Thread.sleep(200); } process(); } ... }
public void doSomething(){ synchronized(monitor) { while(notReady()){ monitor.wait(200); } process(); } ... }