Целью блока synchronized
(или метода synchronized
) является предотвращение взаимодействия потоков друг с другом, когда они получают доступ к общим данным.Цель wait()
, notify()
и notifyAll()
- координировать действия двух или более потоков.
Но только потому, что двум или более потокам необходим доступ к одним и тем же общим данным, это невсегда означает, что они должны координировать свои действия друг с другом для достижения общей цели.Иногда достаточно, чтобы они просто не мешали друг другу.Это то, что делает synchronized
- он удерживает потоки подальше друг от друга.
Кроме того, обратите внимание: только потому, что вы не видите явные вызовы ожидания / уведомления, это не означаетих там нетИногда потоки координируются с помощью объектов синхронизации более высокого уровня (например, BlockingQueue
), которые могут использовать ожидание / уведомление (или нечто эквивалентное ожиданию / уведомлению ) в своей реализации.