Нет компромиссов, есть только подводные камни.
Почти никто не использует wait (), notify () и notifyAll () для реализации управления параллелизмом, если только они не пишут какую-то конструкцию, недоступную в java.util.одновременно.Это очень трудно понять, даже для Дуга Ли (автора книги по параллельному программированию в Java и JSR-166).
Синхронизированная работа для простых случаев, но не дает необходимой детализации (многократное чтение,Блокировки с одним записывающим устройством не поддерживаются только синхронизацией, хотя вы можете использовать его для реализации семафоров, а затем для реализации блокировок RW, но вы бы заново изобрели колесо).