浏览 3317 次
锁定老帖子 主题:一个Java线程死锁的真实案例
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-06-28
前一段时间在做的产品中出现一个BUG,现象是界面起不来,显出Splash Screen后就停在那里。经过分析,调试后发现是传说中的线程死锁。一个已经开发了7,8年的东西,这种问题到现在才无意中暴露出来。 java 代码
程序流程是这样的: 1. Main是程序入口,会启动主界面。 2. startSession方法中的getXXX(this) 会向Server端发送请求,回调函数serverCallback由另一个线程负责调用。 问题分析: 程序停在36行,说明application,也就是Main对象上的锁没有被主线程释放,而主线程之所以没有走到第10行wait,是因为在第8行addPropertyChangeListener的时候发现其他线程在执行serverCallback占用了ApplicationModel对象的锁。 解决方法: 1。Main中不需要同步整个initializeDomainModel方法,只需要将wait放入同步块即可。 2。调换model.startSession和model.addPropertyChangeListener的顺序也可以解决
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |