Java多线程5—死锁和wait()、notify()、notifyAll()
来源:互联网 发布:拼多多和淘宝哪个好 编辑:程序博客网 时间:2024/05/20 11:27
上面的问题同样也会在计算机中线程调度的时候发生。假设在程序中有两个线程1和2。每个线程分别有一个监视器A和B。线程1锁住了对象A的监视器,等待对 象B的监视器,线程2锁住了对象B的监视器,等待对象A的监视器,这样两个线程就都无法运行,就造成了死锁。
我们不希望发生死锁的问题,下面我们举一个例子:有一个情报员需要将数据放到信箱,然后由另一个情报员去取情报。而且每个情报员在放或取情报的时候,先将 信箱占住,这时候另一个情报员无法对信箱操作。当然如果是先放情报,再取情报,不会发生错误。但是如果没有情报的时候,一个情报员先去取情报了,并且把信 箱占住,另一个情报员无法放情报,而第一情报员也无法释放信箱,这样两个情报员就无法工作,就造成了死锁。我们不希望发生这种情况,我们希望当情报员放了 情报通知另一情报员,当情报员取了情报后通知另一个情报员继续放情报。这时候我们就可以在Java中用wait()、notify()方法模拟上面的例 子。下面我们给出代码:
上面的程序注释详细的介绍了,这个程序运行时候注意问题。
每一个对象除了有一个锁之外,还有一个等待队列(wait set),当一个对象刚创建的时候,它的对待队列是空的。我们应该在当前线程锁住对象的锁后,去调用该对象的wait方法。当调用对象的notify方法 时,将从该对象的等待队列中删除一个任意选择的线程,这个线程将再次成为可运行的线程。所以我们使用wait和notify方法的时候必须确定这两个线程 在同一个对象的等待队列。
最后在说一句notifyAll()方法,在等待队列中会有许多的等待线程,调用该方法后,将会唤醒所有的线程。
- Java多线程5—死锁和wait()、notify()、notifyAll()
- Java多线程5—死锁和wait()、notify()、notifyAll()
- Java多线程3:wait、notify和notifyAll
- Java多线程8:wait()和notify()/notifyAll()
- java多线程之wait、notify和notifyAll
- java多线程wait() ,notify() notifyAll()
- java wait()、notify()和notifyAll()
- Java多线程同步之wait和notify/notifyall
- java 多线程 wait()和notify(),notifyAll()的使用
- Java多线程(九)——wait() notify() notifyAll()
- Java多线程——sleep(),wait(),notify(),notifyAll(),join()
- java多线程之 wait(),notify(),notifyAll()
- java多线程之 wait(),notify(),notifyAll() 整理
- Java多线程之wait(),notify(),notifyAll()
- java多线程之 wait(),notify(),notifyAll()[迁]
- Java多线程之wait(),notify(),notifyAll()
- Java多线程,wait()、notify()、notifyAll()详解
- Java多线程之wait(),notify(),notifyAll() .
- 身份证号码验证算法
- 用户管理系统
- tomcat配置图片服务器映射
- UIEventListener是如何工作的及其他
- Minimum Sum LCM UVA
- Java多线程5—死锁和wait()、notify()、notifyAll()
- 【SCOI2007】蜥蜴 网络流
- Eclipse10个常用的快捷键
- SQL SERVER 16进制转10 进制
- 当copy web内容到富文本编辑器时,优化其DOM数据大小(待续)
- Resin maven plugin
- 技术主管成长进度条
- 算法-3-树-汇总(持续更新)-目录呈现
- JS原型继续