Я хотел бы знать, как блокировки реализованы в Java. В некоторых учебниках я обнаружил, что они должны быть реализованы с использованием wait() и notify()/notifyAll() и некоторых логических флагов (это может быть намного сложнее, но в основном это должно быть так)
class SimpleLock {
private boolean locked=false;
public synchronized void lock() throws InterruptedException {
while (locked)
wait();
locked=true;
}
public synchronized void unlock() throws InterruptedException {
locked=false;
notify();
}
}
но я знаю, что интерфейс Lock определяет два метода: Lock.lock(), который не может быть прерван, и Lock.lockInterruptably(), который может и выдает InterruptedException, чтобы иметь дело с даже.
Если бы блокировки были реализованы с помощью wait(), не должны ли они быть прерваны вызовом Thread.interrupt()?
Так как же на самом деле реализованы блокировки? Я думаю, что они основаны на других низкоуровневых средствах синхронизации Java (например, synchronized и wait()/notify()), но я не знаю, как это сделать.