我有一个问题。在下面的代码中,如果一个线程在wait语句被阻塞,而另一个线程试图执行foo(),那么是否会打印hello world消息?为什么?
synchronized foo(){
system.out.println("hello world");
.....
wait();
.....
}
答案 0 :(得分:3)
对于要进入方法foo
的线程,它需要锁定包含foo方法的对象(监视器)。执行wait
时,线程会释放监视器上的锁定。因此,如果另一个线程试图执行foo并且(假设它可以获得锁定)那么它将打印“hello world”消息。
答案 1 :(得分:1)
是
等待();放弃监视器,所以是的,如果在wait()中阻塞了线程A; ,线程B将能够输入foo并打印hello world
答案 2 :(得分:1)
最好在一段时间内包装wait()调用。 原因:零星醒来!