Betreten des Blocks mit einer internen Sperre

Ich sehe nicht, wie der folgende Code eine Ausgabe erzeugt, die der Definition einer Objektsperre zu widersprechen scheint. Sicherlich sollte nur ein Thread die "Angenommene Sperre" -Nachricht drucken dürfen, obwohl beide dies tun?

class InterruptThreadGroup {
    public static void main(String[] args) {
        Object lock = new Object();
        MyThread mt1 = new MyThread(lock);
        MyThread mt2 = new MyThread(lock);
        mt1.setName("A");
        mt1.start();
        mt2.setName("B");
        mt2.start();
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
        }
        // Thread.currentThread().getThreadGroup().interrupt();
    }
}

class MyThread extends Thread {
    private Object lock;

    public MyThread(Object l) {
        this.lock = l;

    }

    public void run() {
        synchronized (lock) {
            System.out.println(getName() + " acquired lock");
            try {
                lock.wait();
            } catch (InterruptedException e) {
                System.out.println(getName() + " interrupted.");
            }
            System.out.println(getName() + " terminating.");
        }
    }
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage