Следующие два определения метода семантически эквивалентны? Зачем? Почему нет?
Версия A:
private static synchronized void foo() {
bar();
}
Версия B:
private static Semaphore available = new Semaphore(1, true);
private static void foo() {
available.acquire();
try {
bar();
}
finally {
available.release();
}
}