Важлива відмінність заблокованого стану та стану очікування - це вплив на планувальник. Нитка в заблокованому стані претендує на замок; цей потік все ще вважається чимось, що планувальник повинен обслуговувати, можливо, враховуючи рішення планувальника про те, скільки часу надавати запущеним потокам (щоб він міг дати шанс блокування потоків на блоці).
Після того, як нитка перебуває в стані очікування, напруга, яку вона надає системі, зводиться до мінімуму, і планувальникові не потрібно про це турбуватися. Він перебуває в спокої, поки не отримає повідомлення. За винятком того, що він тримає нитку ОС зайнятою, вона повністю не грає.
Ось чому використання notifyAll є менш ніж ідеальним, це призводить до того, що низка потоків, які раніше були щасливо дрімаючими, не ставлячи навантаження на систему, щоб прокинутися, де більшість із них заблокує, поки вони не зможуть придбати замок, знайти стан, у якому вони є чекати неправда, і повернутися до очікування. Бажано повідомити лише ті теми, які мають шанс прогресувати.
(Використання ReentrantLock замість внутрішніх блокувань дозволяє вам мати кілька умов для одного блокування, так що ви можете переконатися, що сповіщена нитка є такою, яка чекає за певної умови, уникаючи помилки втраченого сповіщення у випадку отримання потоком повідомлень про щось, на що не може діяти.)