- 7
- 0
- 约9.91千字
- 约 44页
- 2019-08-06 发布于湖北
- 举报
3.4.2 案例分析 以Java语言为例,死锁一般来源于代码段的同步,当一段同步代码被某线程运行时,其他线程可能进入堵塞状态(无法抢占CPU),而刚好在该线程中,访问了某个对象,此时,除非同步锁定被解除,否则其他线程就不能访问那个对象。这可以称为“线程正在等待一个对象资源”。如果出现一种极端情况,一个线程等候另一个对象,而另一个对象又在等候下一个对象,以此类推。这个“ 等候链”如果进入封闭状态,也就是说,最后那个对象等候的是第一个对象,此时,所有线程都会陷入无休止的相互等待状态,造成死锁。尽管这种情况并非经常出现,但一旦碰到,程序的调试将变得异常艰难。 在这里给出一个死锁的案例,如代码P03_10.java 这段程序也貌似没有问题。但是和上一节的例子一样,它也是很不安全的,这种不安全性也很难发现。 观察run()函数中的代码,当th1运行后,进入代码段1,锁定了S1,如果此时th2运行,抢占CPU,进入代码段3,锁定S2,那么th1就无法运行代码段2,但是又没有释放S1,此时,th2也就不能运行代码段4。造成互相等待。为了模拟这个过程,我们在程序中增加让其休眠的代码,好让另一个线程来抢占CPU。将P03_10.java的代码改为P03_11.java 该代码中,增加了一行:程序休眠1000毫秒,让另一个线程来抢占CPU。运行,控制台打印如下: 两个线程陷入无休止的等待
您可能关注的文档
最近下载
- 第二章第三节等高线地形图判读课件-中图版地理七年级上册.pptx
- 大象版(新教材)小学科学四年级上册第四单元《2 光会被挡住吗》精品教案.docx VIP
- 2025年法语高考试卷真题及答案.doc VIP
- 中医温热疗法预防烧伤护理指南.pdf VIP
- 旭格创新产品手册.pdf
- 电磁环境监测实施办法.docx VIP
- 质量管理小组活动推进指南(TCAQ10208-2024).docx
- 【三菱】MR-J4-_A(-RJ)_MR-J4-_A4(-RJ)_MR-J4-_A1(-RJ)伺服放大器技术资料集.pdf VIP
- 哈尔滨商业大学2023-2024学年第2学期《高等数学(下)》期末试卷(B卷)附标准答案.pdf
- 安全标准管理制度清单.docx VIP
原创力文档

文档评论(0)