Open panhongan opened 4 years ago
如果一个线程在同步块中调用了Object#wait方法, 会将该线程对应的ObjectWaiter从EntryList移除并加入到WaitSet中,然后释放锁。当wait的线程被notify之后,会将对应的ObjectWaiter从WaitSet移动到EntryList中。
个人理解是:wait调用必须在synchronized代码块里。在synchronized进入时候,就已经将ObjectWaiter从EntryList移除;所以当发生wait调用的时候,应该是直接将ObjectWaiter对象加入到WaitSet,然后释放锁,并没有从EntryList移除这一步。
如果一个线程在同步块中调用了Object#wait方法, 会将该线程对应的ObjectWaiter从EntryList移除并加入到WaitSet中,然后释放锁。当wait的线程被notify之后,会将对应的ObjectWaiter从WaitSet移动到EntryList中。
个人理解是:wait调用必须在synchronized代码块里。在synchronized进入时候,就已经将ObjectWaiter从EntryList移除;所以当发生wait调用的时候,应该是直接将ObjectWaiter对象加入到WaitSet,然后释放锁,并没有从EntryList移除这一步。