编程 || wait、notify
2022-11-01 本文已影响0人
快语
wait()和notify()其实还是比较搞的。
为啥这么说?
因为他们关联了锁对象,以及在锁对象上排着队的线程。有些地方会用this.wait(),有些则会专门创建一个锁对象比如lock,用lock.wait()。
正是因为关联了锁对象,所以wait和notify,只有在Synchronized块中,并且由Sychronized关键字加的锁对象来调用,才有意义。
同时,wait还要和sleep做区分。
sleep()是最容易的。锁不锁的跟sleep没啥关系,我就是单纯地睡会儿,起来继续干。
wait():我碰到些情况,执行不下去,你们先干吧!但是其他线程傻在那,让我们干,我们也干不了啊,老兄你拿着锁呢!然后wait就把锁给释放了。从一堆排着队的线程里挑一个让它去干活。这个兄弟干完了,或者某些其他兄弟干完了,并且它们知道自己干完了以后,wait中的那个线程就可以接着干,于是就会用notify()方法随机通知一个wait中的线程,或者用一个nofifyAll()方法唤醒所有wait中的线程。
notify():就是通知wait中的线程可以动了,不过让wait动起来还有个条件,就是notify本身所在的Synchronized块已经执行完成,锁已经释放。
总的来说,这一对家伙理解起来还是比较烦的。好在平时不大用他们。