日常小结-关于swing某死锁问题的小结

2024-06-10 18:32

本文主要是介绍日常小结-关于swing某死锁问题的小结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题概述

最近做了一个IM一般的项目。算是写着玩不过也是个比较完整的项目,这两天遇到一个奇怪的问题就是。在接受离线的消息的时候有时候客户端方面有时候会失去响应。通常第一遍都是运行良好但是第二次运行的时候就会出问题。例如user1给user2发送信息,然后登陆user2,user2接收到信息。但是再关闭user2的客户端,然后user1重新发送一个新消息给user2。这时user2客户端会死锁。而且这部分是早先写的就最近才发现原来会出现失去响应的问题。

其实写程序就是怕这样的问题。多线程的问题,以前写的程序,测试没检测出来。

由于是第一次一般不出现问题而第二次会出现问题。我就很显然的把问题定位到了关闭客户端之后的清理工作。尝试多次后发现问题似乎不出在这里。后来多做几个测试后发现问题并非总是出现在第二次,只是之前凑巧了在第二次出问题。在user2登陆后接收离线消息的时候会有一定概率出现失去响应的问题。通常来说失去响应很多时候都是死锁问题。

定位死锁位置

我考虑到是死锁问题就开始尝试调试看看到底是哪里出现了死锁问题。首先我来简要说明下程序设计的结构问题。客户客户段的登陆界面我只用了一个类去写,也就是GUIMainwindows。剩下所有的动作都是内部类。这个类的方法只有两个地方上了锁一个是用的GUIMainwindows.this的锁。另一个就JTree。这个Jtree是用来组织用户的好友列表的,只有在关联这方面操作的时候才会使用。这就觉得比较好奇了。因为我仔细检查我程序发现并没有什么问题。而且从接受离线消息到显示只涉及到了GUIMainwindows.this一个锁,在我理解范围内应该是不会出现死锁问题的。不过凡事都要以实践为准。

我几次测试后发现并不是我本身的程序出现了错误而是处理离线消息的线程和AWTeventquet-0之间死锁了。用eclipse挂起者两个线程之后发现我自己写的程序需要Jtree的锁,但持有GUIMainwindows.this的锁࿰

这篇关于日常小结-关于swing某死锁问题的小结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1048940

相关文章

IDEA和GIT关于文件中LF和CRLF问题及解决

《IDEA和GIT关于文件中LF和CRLF问题及解决》文章总结:因IDEA默认使用CRLF换行符导致Shell脚本在Linux运行报错,需在编辑器和Git中统一为LF,通过调整Git的core.aut... 目录问题描述问题思考解决过程总结问题描述项目软件安装shell脚本上git仓库管理,但拉取后,上l

idea npm install很慢问题及解决(nodejs)

《ideanpminstall很慢问题及解决(nodejs)》npm安装速度慢可通过配置国内镜像源(如淘宝)、清理缓存及切换工具解决,建议设置全局镜像(npmconfigsetregistryht... 目录idea npm install很慢(nodejs)配置国内镜像源清理缓存总结idea npm in

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

MySQL中VARCHAR和TEXT的区别小结

《MySQL中VARCHAR和TEXT的区别小结》MySQL中VARCHAR和TEXT用于存储字符串,VARCHAR可变长度存储在行内,适合短文本;TEXT存储在溢出页,适合大文本,下面就来具体的了解... 目录一、VARCHAR 和 TEXT 基本介绍1. VARCHAR2. TEXT二、VARCHAR

idea突然报错Malformed \uxxxx encoding问题及解决

《idea突然报错Malformeduxxxxencoding问题及解决》Maven项目在切换Git分支时报错,提示project元素为描述符根元素,解决方法:删除Maven仓库中的resolv... 目www.chinasem.cn录问题解决方式总结问题idea 上的 maven China编程项目突然报错,是

全网最全Tomcat完全卸载重装教程小结

《全网最全Tomcat完全卸载重装教程小结》windows系统卸载Tomcat重新通过ZIP方式安装Tomcat,优点是灵活可控,适合开发者自定义配置,手动配置环境变量后,可通过命令行快速启动和管理... 目录一、完全卸载Tomcat1. 停止Tomcat服务2. 通过控制面板卸载3. 手动删除残留文件4.

Python打包成exe常用的四种方法小结

《Python打包成exe常用的四种方法小结》本文主要介绍了Python打包成exe常用的四种方法,包括PyInstaller、cx_Freeze、Py2exe、Nuitka,文中通过示例代码介绍的非... 目录一.PyInstaller11.安装:2. PyInstaller常用参数下面是pyinstal

Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题

《Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题》在爬虫工程里,“HTTPS”是绕不开的话题,HTTPS为传输加密提供保护,同时也给爬虫带来证书校验、... 目录一、核心问题与优先级检查(先问三件事)二、基础示例:requests 与证书处理三、高并发选型:

前端导出Excel文件出现乱码或文件损坏问题的解决办法

《前端导出Excel文件出现乱码或文件损坏问题的解决办法》在现代网页应用程序中,前端有时需要与后端进行数据交互,包括下载文件,:本文主要介绍前端导出Excel文件出现乱码或文件损坏问题的解决办法,... 目录1. 检查后端返回的数据格式2. 前端正确处理二进制数据方案 1:直接下载(推荐)方案 2:手动构造

Python绘制TSP、VRP问题求解结果图全过程

《Python绘制TSP、VRP问题求解结果图全过程》本文介绍用Python绘制TSP和VRP问题的静态与动态结果图,静态图展示路径,动态图通过matplotlib.animation模块实现动画效果... 目录一、静态图二、动态图总结【代码】python绘制TSP、VRP问题求解结果图(包含静态图与动态图