https://blog.csdn.net/lingzhm/article/details/44940823
原理:https://www.cnblogs.com/tiancai/p/8855125.html
一.
- 为什么wait(),notify()必须在同步方法/代码块中调用?
x详解:https://blog.csdn.net/weixin_36380516/article/details/121710146
在当前线程里调用锁对象的wait方法,当前线程就释放了Monitor,当前线程进入waitSet
当该对象调用了notify方法或者notifyAll方法后,wait-set中的线程就会被唤醒,然后在wait-set队列中被唤醒的线程和entry-set队列中的线程一起通过CPU调度来竞争对象的Monitor,最终只有一个线程能获取对象的Monitor。
- notify()方法 是随机唤醒一个线程的嘛?
不是,"先进先出”的顺序唤醒:https://blog.csdn.net/thlzjfefe/article/details/109961385
notify()或者notifyAll()调用时并不会真正释放对象锁, 必须等到synchronized方法或者语法块执行完才真正释放锁。调用notify()或者notifyAll()只是唤醒wait-set里面的线程,当当前线程释放锁后,唤醒的线程 和 entry-set 里面的线程一起竞争锁:
https://blog.csdn.net/AttleeTao/article/details/110133661
- wait方法是可以给他传一个时间参数进去的,是一种自动唤醒机制.在指定时间内,如果没有其他线程唤醒自己,则主动唤醒自己。如果传0或者不传,则表示永久等待
网友评论