Java中的同步方法

时间:2010-04-26 09:28:02

标签: java concurrency synchronized

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

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

最好在一段时间内包装wait()调用。 原因:零星醒来!