farmerjohngit / myblog

有深度的Java技术博客
1.83k stars 286 forks source link

wait调用描述是否有误 #24

Open panhongan opened 4 years ago

panhongan commented 4 years ago

如果一个线程在同步块中调用了Object#wait方法, 会将该线程对应的ObjectWaiter从EntryList移除并加入到WaitSet中,然后释放锁。当wait的线程被notify之后,会将对应的ObjectWaiter从WaitSet移动到EntryList中。

个人理解是:wait调用必须在synchronized代码块里。在synchronized进入时候,就已经将ObjectWaiter从EntryList移除;所以当发生wait调用的时候,应该是直接将ObjectWaiter对象加入到WaitSet,然后释放锁,并没有从EntryList移除这一步。