首页 > 试题广场 >

wait方法底层原理

[问答题]
object中的方法,可以暂停线程,期间会释放对象锁,不像sleep方法,线程休眠期依然持有锁,wait方法的线程,必须调用notify或notifyAll方法唤醒线程!
发表于 2019-05-05 13:25:18 回复(0)
更多回答
wait方***将当前线程放入wait set,等待被唤醒,并放弃lock对象上的所有同步声明。
1、将当前线程封装成ObjectWaiter对象node;
2、通过ObjectMonitor::AddWaiter方法将node添加到_WaitSet列表中;
3、通过ObjectMonitor::exit方法释放当前的ObjectMonitor对象,这样其它竞争线程就可以获取该ObjectMonitor对象。
4、最终底层的park方***挂起线程;
(最后与之对应的notify方法会随机唤醒_WaitSet中随机一个线程
发表于 2019-06-15 11:53:03 回复(2)
object中的方法,可以暂停线程,期间会释放对象锁,不像sleep方法,线程休眠期依然持有锁,wait方法的线程,必须调用notify或notifyAll方法唤醒线程!
发表于 2019-02-02 17:05:03 回复(1)
这种题感觉没啥实际意义
发表于 2020-07-01 19:44:01 回复(0)