目录
- 一、monitor锁结构图
- 二、说明
一、monitor锁结构图
二、说明
- 1.线程1一开始持有对象A的monitor锁,即monitor中的owner指向线程1
- 2.线程1在执行的过程中发现条件a不满足执行不下去了,此时线程1可以调用wait方法,那么线程1就进入waitset进行等待,状态为waiting
- 3.线程4准备给对象A加锁,发现当前对象A的monitor的owner是线程2,线程4则会进入entryList中准备竞争
- 4.waitset和entrylist中的线程都处于阻塞状态,不会占用cpu的时间片
- 5.waitset中的线程是获取到了锁,但又主动放弃了锁;entrylist中的线程是准备加锁时发现锁已经被其它线程占用,而获取不到锁
- 6.waitset中的线程1和线程3会在owner指向的线程1调用notify或者notifyAll时唤醒,被唤醒后,不会立刻获得锁,还是要进入entrylist等待下一次竞争