Чтобы не писать лишнего кода в простых случаях. Никто не запрещает использовать интерфейсы
Lock и
Condition (в котором есть аналоги - await, signal, signalAll), позволяющие более гибко использовать синхронизацию, например, реализовывать несколько различных блокировок.