notify
and notifyAll
both wake up sleeping threads waiting on the object’s monitor, but notify
only wakes up
one single thread, while notifyAll
wakes them all up. Unless you do not care which specific thread is woken up, notifyAll
should be used instead.
class MyThread implements Runnable { Object lock = new Object(); @Override public void run() { synchronized(lock) { // ... lock.notify(); // Noncompliant } } }
class MyThread implements Runnable { Object lock = new Object(); @Override public void run() { synchronized(lock) { // ... lock.notifyAll(); } } }