java死锁范例以及如何分析死锁-java开发java经验技巧

java死锁范例以及如何分析死锁-java开发java经验技巧

ID:30777924

大小:92.03 KB

页数:7页

时间:2019-01-03

java死锁范例以及如何分析死锁-java开发java经验技巧_第1页
java死锁范例以及如何分析死锁-java开发java经验技巧_第2页
java死锁范例以及如何分析死锁-java开发java经验技巧_第3页
java死锁范例以及如何分析死锁-java开发java经验技巧_第4页
java死锁范例以及如何分析死锁-java开发java经验技巧_第5页
资源描述:

《java死锁范例以及如何分析死锁-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Java死锁范例以及如何分析死锁-编程开发技术Java死锁范例以及如何分析死锁木文由ImportNew・范琦琦翻译自journaldevo欢迎加入翻译小组。转载请见文末要求。死锁是两个甚至多个线程被永久阻塞时的一种运行局面,这种局面的生成伴随着至少两个线程和两个或者多个资源。在这里我已写好一个简单的程序,它将会引起死锁方案然后我们就会明白如何分析它。Java死锁范例ThreadDeadlock.javapackagecom.journaldcv.threads;publicclassThreadD

2、eadlock{publicstaticvoidmain(String[]args)throwsTnterruptedExceptionObjectobjlObjectobj2Objectobj3newObject();newObject();newObject();Threadtl二newThread(newSyncThrcad(objl,obj2),〃tl〃);Threadt2=newThread(newSyncThread(obj2,obj3),"t2");Threadt3=newThrea

3、d(newSyncThread(obj3,objl),"t3");tl.start();Thread,sleep(5000);t2.start();Thread,sleep(5000);t3.start();classSyncThreadimplernentsRunnable{privateObjectobjl;privateObjectobj2;publicSyncThread(Objectol,Objecto2){this.objl=ol;this・obj2=o2;}©Overridepubl

4、icvoidnan(){Stringname=Thread.currentThread().getNameO;System.out.println(nanie+〃acquiringlockon〃+objl);synchronized(objl){System.out.println(name+"acquiredlockon〃+objl);work();System,out.println(name+〃acquiringlockon〃+obj2);synchronized(obj2){System,

5、out.printin(name+〃acquiredlockon〃+obj2);work();}System,out.println(namc+"releasedlockon〃+obj2);}System.out.println(nanie+〃releasedlockon〃+objl);System,out.printin(name+〃finishedexecution./z);}privatevoidwork(){try{Thread,sleep(30000);}catch仃nterrupted

6、Exceptione){e.printStackTrace();在上面的程序中同步线程正完成Runnable的接口,它工作的是两个对象,这两个对象向对方寻求死锁而且都在使用同步阻塞。在主函数中,我使用了三个为同步线程运行的线程,而且在其中每个线程中都有一个可共享的资源。这些线程以向笫一个对彖获取封锁这种方式运行。但是当它试着像第二个对彖获取封锁吋,它就会进入等待状态,因为它已经被另一个线程封锁住了。这样,在线程引起死锁的过程中,就形成了一个依赖于资源的循环。当我执行上而的程序时,就产生了输出,但是

7、程序却因为死锁无法停止。tlacquiringlockonjava.lang.0bject@6d9dd520tlacquiredlockonjava.lang.0bject@6d9dd520t2acquiringlockonjava.lang.0bject@22aed3a5t2acquiredlockonjava,lang.Object@223ed3a5t3acquiringlockonjava.lang.0bject@218c2661t3acquiredlockonjava.lang.0bjec

8、t@218c266111acquiringlockonjava.lang.0bject@22aed3a5t2acquiringlockonjava,lang.Object@218c2661t3acquiringlockonjava.lang.Object@6d9dd520在此我们可以清楚地在输岀结果屮辨认岀死锁局面,但是在我们实际生活所用的应用中,发现死锁并将它排除是非常难的。分析死锁为了分析一个死锁,我们需要关注下应用中的Java线程转存,在上一节中我已经解释了如何使用Visua

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。