等待后不应该线程处于阻塞状态而不是runnable状态?

时间:2009-11-15 19:52:48

标签: java multithreading

我正在阅读一本java 6书。下面从Threads章节给出了一个示例代码片段,我需要澄清

synchronized(a){ //The thread gets the lock on 'a'
a.wait(2000);// Thread releases the lock and waits for notify only for maximum of two seconds, then goes back to runnable state
//The thread reacquires the lock
//More instructions here
}

现在我的疑问是,经过2秒的等待时间后,继续进一步执行代码,上面的代码需要对对象'a'进行锁定,并且有可能另一个线程(应该调用notify)( )a)可能已经锁定了它。

因此,在2秒等待之后线程不应该进入阻塞状态,而不是如上面评论中提到的Runnable状态(在第2行中)。

1 个答案:

答案 0 :(得分:1)

如果另一个线程锁定了对象,那么是的,你是对的,它会等待。当指定的时间量过去时,等待的javadocs会发出以下行为。

“然后从该对象的等待集中删除线程T并重新启用线程调度。然后以常规方式与其他线程竞争,以便在对象上进行同步;一旦获得对象的控制权对象,它在对象上的所有同步声明都恢复到原状 - 也就是说,调用wait方法时的情况“