Java 等待后';线程是否处于阻塞状态而不是可运行状态?

Java 等待后';线程是否处于阻塞状态而不是可运行状态?,java,multithreading,Java,Multithreading,我正在看一本Java6的书。下面给出了线程一章中的一个示例代码片段,在这里我需要澄清 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

我正在看一本Java6的书。下面给出了线程一章中的一个示例代码片段,在这里我需要澄清

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”进行锁定,并且很可能另一个线程(应该调用a上的notify())已经对其进行了锁定


因此,线程不应该在等待2秒后进入阻塞状态,而不是在注释(第2行)中提到的可运行状态。

如果另一个线程在对象上有锁,那么是的,您是正确的,它将等待。当经过指定的时间量时,javadocs for wait会声明以下行为


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

在上面的语句中,它说“重新启用线程调度”“在第一行中,这意味着它现在处于可运行状态。对吗?但下一行再次指出,现在它完成了与其他线程的同步(即获得锁),那么这将意味着线程处于对象锁的阻塞状态,那么哪一个是正确的?它是处于可运行状态还是阻塞状态?如果我在任何地方都错了,请纠正我。如果没有其他线程有锁,它将是可运行的,但是如果其他线程有锁,它将不得不像其他线程一样等待。您应该编写一些测试来进一步探索此行为。感谢提供此信息。我将尝试一些建议的例子