java tutorial里的例子,为什么会死锁?我死活分析不出来

问题描述

publicclassDeadlock{staticclassFriend{privatefinalStringname;publicFriend(Stringname){this.name=name;}publicStringgetName(){returnthis.name;}publicsynchronizedvoidbow(Friendbower){System.out.format("%s:%s"+"hasbowedtome!%n",this.name,bower.getName());bower.bowBack(this);}publicsynchronizedvoidbowBack(Friendbower){System.out.format("%s:%s"+"hasbowedbacktome!%n",this.name,bower.getName());}}publicstaticvoidmain(String[]args){finalFriendalphonse=newFriend("Alphonse");finalFriendgaston=newFriend("Gaston");newThread(newRunnable(){publicvoidrun(){alphonse.bow(gaston);}}).start();newThread(newRunnable(){publicvoidrun(){gaston.bow(alphonse);}}).start();}}为什么会死锁呢?

解决方案

解决方案二:
很明显啊,两个线程调用同一个资源bowBack()造成的
解决方案三:
是比较特殊,用了两个同步就出这个问题了
解决方案四:
假设alphonse为A,alphonse为B在A的同步代码区想要调用B的方法,但是这个时候在B的同步代码区想要调用A的方法,所以就死锁了。。。
解决方案五:
两个线程互相锁了.
解决方案六:
你创建了两个对象(资源),两个线程。每一个线程都占有一个非共享资源的同时又去争取另外一个线程占有的非共享资源,刚好符合死锁死锁的最简单条件,成了一个闭环!这段程序想不死锁的方法太多了,就不说了。

时间: 2024-10-28 05:47:31

java tutorial里的例子,为什么会死锁?我死活分析不出来的相关文章

代码-java jquery里多个下拉框并列下来,狠高深

问题描述 java jquery里多个下拉框并列下来,狠高深 就比如 一 二 三 四 五 每个大写的数字代表一个下拉框 每个下拉框里面还有他自己的子项,怎么写代码能实现 一 ⑴ ⑵ 二 三 ⑴ ⑵ 四 五 或者都點開,麻煩大神了... 解决方案 我的QQ 765278009 謝謝了 解决方案二: 网上这种例子应该不少,你参考一下代码,结合自己的需求看看,http://www.cnblogs.com/wintersun/archive/2009/05/28/1491323.html 解决方案三:

java tutorial 和 java language specification 关系

问题描述 我在java的网站上下载了java tutorial和The Java Language Specification,这两者之间是什么关系呢? 解决方案 java tutorial Java教程The Java Language Specification Java语言规范教程多是教你怎么使用java语言 里面有一些小例子语言规范侧重于 语言的语法和规范解决方案二:java tutorial侧重于怎么用java,而The Java Language Specification介绍的是使

请问下安卓接收消息,不用广播用事件监听怎么实现啊?demo里有例子吗?

问题描述 请问下安卓接收消息,不用广播用事件监听怎么实现啊?demo里有例子吗? 解决方案 看下ChatDemoUI的DemoHXSDKHelper类,MainActivity类,以及chatActivity类,都有onEvent方法,3.0demo的话看下DemoHeleper类解决方案二:http://docs.easemob.com/doku.php?id=start:200androidcleintintegration:40broadcastreceiver#回调监听事件注册

android控件-android中xml设置控件的属性和java文件里设置控件的属性有何不同

问题描述 android中xml设置控件的属性和java文件里设置控件的属性有何不同 android中xml设置控件设置的属性和java文件里设置控件的属性有何不同 是不是java文件里设置可以改变动态的改变控件位置,文字颜色,文字大小 而在xml文件设置之后就无法改变 那具体在java文件设置的属性是如何改变的呢 解决方案 java中可以重新设置去改变xml的设置.但是xml不能去改变java中的设置. 解决方案二: 你可以这样理解,xml设置以后基本不会改变,如果会改变,就要在java里面设

集群-java程序里如何集成zookeeper应用

问题描述 java程序里如何集成zookeeper应用 在网上的资料全是zookeeper的安装测试,这些我已经完成了,现在想在java程序里调用zookeeper集群选举出来的leader的IP地址,这个需求应该怎么用java实现,求高手解答,谢谢! 解决方案 1:首先启动你的zookeeper的服务.你肯定是吧你的服务注册到你的zookeeper中2:在启动zookeeper之前你得先安装dubbo这个服务中间件,他们是配套使用的.这个你去网上下载就行3:在spring的配置文件中配置zoo

Java控制台里,怎么清屏啊?

问题描述 Java控制台里,怎么清屏啊? 解决方案 解决方案二:控制台右击然后clear解决方案三:DOS窗口清屏clsEclipse控制台清屏点右console右上角第一个带x的图片就是clearconsole解决方案四:亲,我说的是代码如果实现自动清屏解决方案五:for(inti=o;i<=50;i++){System.out.println();}解决方案六:我是想执行下一步,把前面输出的东西清除掉啊!怎么用代码清除解决方案七:控制台有个按钮,鼠标有提示(clean)解决方案八:我是想自动

c发出一个http请求 参数 在 请求的数据体中 如何在java服务器里获取 感激不尽

问题描述 c发出一个http请求 参数 在 请求的数据体中 如何在java服务器里获取 感激不尽 解决方案 java 模拟http请求获取数据 解决方案二: 不知道楼主发出的请求是让java服务器接收还是什么意思

为什么java接口里不能有成员属性?

问题描述 为什么java接口里不能有成员属性? 为什么java接口里不能有成员属性?为什么java接口里不能有成员属性? 解决方案 java接口中只能有静态常量和抽象方法的规范. 解决方案二: 这是语法规定,接口是特殊的抽象类.即只包含抽象方法和常量.

android-Android怎么在java文件里设置第三方类包的属性值

问题描述 Android怎么在java文件里设置第三方类包的属性值 解决方案 查看这个控件的源码看看是否有相关的设置方法 解决方案二: 这个问题自己也不太了解,但可以推荐几篇有关这个方面的博文.http://blog.csdn.net/bruce_ke/article/details/6911237http://blog.csdn.net/tanqiantot/article/details/8588771 解决方案三: 在需要引用的xml文件中的根布局里面加上xmlns:app = "http