使用synchronized关键字的困惑

时间:2017-12-18 12:10:01

标签: java multithreading synchronized monitors

准备考试时这是一个混乱,我有一些奇怪的代码,除了烦恼之外什么都不做。请参阅以下代码

public class p2 implements Runnable {

    static Object lock = new Object();

    public void run() {
        String name = Thread.currentThread().getName();
        synchronized(lock) {
            System.out.println(name + " entering lock.");
            try { lock.wait(); } catch(Exception e) {System.out.println(e);}
            System.out.println(name + " came out");
        }
    }

    public static void main(String[] args) {
        new Thread(new p2()).start();
        new Thread(new p2()).start();
    }
}

代码的输出是:

Thread-0 entering lock.
Thread-1 entering lock.

我的问题是当线程进入同步块时,它对该块具有独占访问权,因为它对该对象的监视器具有所有权。那么为什么允许Thread-1进入监视器?

0 个答案:

没有答案