notify
and notifyAll
both wake up sleeping threads, but notify
only rouses one, while notifyAll
rouses all of them. Since notify
might not wake up the right thread, notifyAll
should be used instead.
class MyThread extends Thread{ @Override public void run(){ synchronized(this){ // ... notify(); // Noncompliant } } }
class MyThread extends Thread{ @Override public void run(){ synchronized(this){ // ... notifyAll(); } } }