Ну и задачака
Один из вариантов решения этой задачи может быть следующим:
Создаем два объекта Lock, один для мужчин, другой для женщин.
Создаем два объекта Condition, один для мужчин, другой для женщин.
Создаем два потока (threads), один для мужчин, другой для женщин.
В каждом из потоков реализуем следующий алгоритм:
Получаем блокировку (lock) на свой объект Lock.
Если душевая занята противоположным полом, то ожидаем (await) на своем объекте Condition.
Если душевая свободна, то занимаем ее и запускаем процесс «помывки».
По окончании процесса «помывки» сигнализируем (signal) об освобождении душевой другому потоку через его объект Condition.
Освобождаем (unlock) свой объект Lock.