java 如何调试(实例未结束跟踪)

zhouhaochen 2010-02-09 08:11:40
我的程序用到了socket ,程序运行结束后,但并没有退出,socket 我关掉了,
我用的eclispe,运行完毕后,console界面上的terminate按钮一直都是亮的
用debug看了下最后是这样的

-AlcDeviceJc[Java Application]
---AlcDeviceJc at localhost:1965
----Thread[DestroyJavaVM](Runing)
----Thread[Thread-1](Runing)


我怎么能知道是什么没有关闭啊?? 谢谢



用什么调试工具可以更好的调试???能知道是哪个没有关闭?
...全文
113 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
冰思雨 2010-02-10
  • 打赏
  • 举报
回复
很明显,JVM当中还有未结束的应用线程。
说明,还有你创建的线程没有结束。
线程结束,其实就是run方法得到返回。
也就是说,你的程序代码当中,run方法没有执行完毕。
既然楼主会用debug模式看线程状态,那就一定会设置程序的断点来进行分析。

一般会考虑两种状况,一种是程序结构有问题;另一种是线程资源未释放。
程序结构问题,是指诸如try-catch的语句位置,是否包含正确的语句以及循环是否未结束啊,等等。
循环未结束,就是说,有没有那种while(true)的死循环,或者其他的循环结构没有跳出循环。
资源未释放,一般是指,具有使线程阻塞的资源,由于未满足相应的条件,
使得线程仍然阻塞,下面的代码也就无法运行到。
比如:ServerSocket.accept()方法,当没有客户端程序进行TCP连接时,线程被阻塞,直到有连接进来,才运行后面的代码。当然,诸如此类的状况还有很多,阻塞读就是其中的一种。
zm_hs 2010-02-10
  • 打赏
  • 举报
回复
我也给楼主顶一个
owen_008 2010-02-10
  • 打赏
  • 举报
回复

给楼主顶一个
bobo364 2010-02-10
  • 打赏
  • 举报
回复
多线程确实比较搞,我搞出的多线程多半都有问题
czmchen 2010-02-10
  • 打赏
  • 举报
回复
引用 2 楼 coldanimal 的回复:
----Thread[Thread-1](Runing)
线程还没有结束哇
肯定是try catch写得不规范哇  或者少了几个if


try catch写得不规范,规范点就知道什么回事了
zl3450341 2010-02-09
  • 打赏
  • 举报
回复
引用 2 楼 coldanimal 的回复:
----Thread[Thread-1](Runing)
线程还没有结束哇
肯定是try catch写得不规范哇  或者少了几个if
----Thread[Thread-1](Runing)
小贝壳666 2010-02-09
  • 打赏
  • 举报
回复
因程序健状性不够,导致socket没关,或是半连接状态,查看电脑的端口占用情况,用TCPView软件会很方便,直接结束进程。
knightzhuwei 2010-02-09
  • 打赏
  • 举报
回复
Thread-1 这不是你新写的线程么?
一头头 2010-02-09
  • 打赏
  • 举报
回复
----Thread[Thread-1](Runing)
线程还没有结束哇
肯定是try catch写得不规范哇 或者少了几个if
bayougeng 2010-02-09
  • 打赏
  • 举报
回复
用多线程了吧?
。。。
太短还不让回,太长了受的了么?

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧