这是准备考试时的困惑,我有一段奇怪的代码,除了让我头疼之外什么也没做。参考下面的代码
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
允许进入监视器呢?