1

我有个问题。在下面的代码中,如果一个线程在等待语句中被阻塞,而另一个线程尝试执行 foo(),会打印 hello world 消息吗?为什么?

synchronized foo(){
    system.out.println("hello world");
    .....
    wait();
    .....
}
4

3 回答 3

3

为了让线程进入该方法foo,它需要锁定包含 foo 方法的对象(监视器)。执行时wait,线程释放监视器上的锁。因此,如果另一个线程尝试执行 foo 并且(假设它可以获得锁),那么它将打印“hello world”消息。

于 2010-04-26T09:34:45.833 回答
1

将 wait() 调用包装在一段时间内也是一种最佳实践。原因:零星醒来!

于 2010-04-26T13:50:08.563 回答
1

是的。

等待(); 放弃监视器,所以是的,如果线程 A 在 wait() 中被阻塞;, 线程 B 将能够进入 foo 并打印 hello world

于 2010-04-26T09:32:38.493 回答