Мне нужно разъяснение по поводу проблемы, связанной с многопоточностью. У меня есть темы, которые приобретают семафор, и через некоторое время его выпускают. Как только это делается, выпуская первый семафор, он приобретает второй, а через некоторое время освобождает его. Оба семафора защищают разный код в методе run () потока. Примерно так:
public void run() {
System.out.println("Step 1");
semaphoreA.acquire();
// Run for a while
semaphoreA.release();
// Run for a while
semaphoreB.acquire();
System.out.println("Step 2");
// Run for a while
semaphoreB.release();
}
Итак, когда нет разрешения на семафор B, поток ожидает. Однако, когда разрешение становится доступным, я не должен увидеть «Шаг 2» на консоли? Или так работает нить и семафор?
Я хочу понять, что произойдет, если поток будет только что уведомлен о доступном разрешении семафора. Будет ли этот поток начаться с самого начала? или с той точки, где от нее осталось?