java里Object.notify()方法的作用
最后更新于
这有帮助吗?
最后更新于
这有帮助吗?
之前我在学习 object 里面
notify方法的时候
网上大部分的教程都是在main方法里
写了一些代码来讲解
然后呢我就觉得这种方法理解起来哈
不是那么容易
所以呢今天我用三个 Controller(HTTP请求)
给大家分享一下他们的使用方法
那说到 notify 我们就要说 wait
这两个方法都是在
synchronized 的里边使用的
也就说:他们都跟锁有关系
第一个 Controller 呢就是很简单
做了一把锁
然后呢我们在这做了一个 wait
就意味着所有的请求进来之后
都会被卡在这个地方
第二个
也是更简单哈
就在 synchronized 的里面做了一个 notify
第三个一样 notifyAll 我们来试一下哈
首先呢先来一个请求
produce的(001)
大家看:001进入
什么意思呢
也就说现在001
这个 id 的线程进来之后是卡在这了
(因为)他没有被唤醒
然后呢我们再来一个窗口
002
大家看:002进来了!这说明什么呢
说明001卡在这的同时他释放了锁
否则002是进不来的
对吧!我们再来一个003
大家看003也进来了
也就是说现在
有三个线程是卡在这个地方
并且他们都释放了这把锁
好那我们再来一个 notify 大家看啊 notify
在这里
因为他们都释放锁了 notify 肯定会进来
进来的话他就会执行这个 notify 方法
打开第一个有结果了
就说他会唤醒
第一个
第二个和第三个现在都还卡着呢
我们先再执行一下 notify
大家看!第二个也被唤醒
同时呢第二个也有响应了
同理第三个也是,我们再执行一下
第三个被唤醒
好 这就是notify()
然后 notifyAll() 呢
字面理解也很容易理解
他就直接全部唤醒
好我们再来试一下
001、002、003
好我们在执行下notifyAll()
大家看!3被唤醒、2被唤醒、1被唤醒
这里边顺序就很有意思
notifyAll的时候他是这种后进后出的顺序
那一个一个 notify 的时候呢
就是先进先出的顺序