java程序中如果有死循环运行一段时间后会死掉吗?

qiufeng1989916 2013-03-11 11:00:23
是这样的,我写的一个java程序,用来做socket连接收发信息,里面有死循环,一直监听socket端口,但是运行一段时间之后,发现连接我程序就连不上了,是怎么回事呢?现在大概有60个终端在通过socket连接我的程序。程序连不上的时候也没有报任何异常。大家帮忙分析下是什么原因呢?
线程池用的是这个:ThreadPoolExecutor,最大线程数设置为了10000,但是调用的时候我是这样写的:

ServerSocket server;
try {
server = new ServerSocket(6000);
while(true)
{
threadPool.execute(new ThreadTask(server.accept()));
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
...全文
989 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiufeng1989916 2013-06-07
  • 打赏
  • 举报
回复
抱歉各位结贴结晚了,这个是比较久之前的问题。我后来仔细检查了代码,其实之前通过我的描述也能看出,是因为从连接池里取出连接之后没有关闭,导致连接池用光了,so,把该关闭的地方关闭就好了。谢谢各位的回答和意见。
想喝咖啡的貓 2013-03-18
  • 打赏
  • 举报
回复
你服务器端 响应客户端连接请求的socket 没有设读超时吧。
土豆片子 2013-03-18
  • 打赏
  • 举报
回复
朋友,解决了吗,我现在也碰到了个这样的问题··· socket连接四五天后就连接不上了
sffx123 2013-03-13
  • 打赏
  • 举报
回复
循环里面加上日志,看看到底添加了多少个线程。有可能客户端重连导致多添加线程了
qiufeng1989916 2013-03-13
  • 打赏
  • 举报
回复
我是楼主,这个问题,我之前一直以为是内存的问题,但是昨天我在自己电脑做了个试验,就是当连接数超过线程池最大数的时候,就会出现连接上但收不到消息的情况。但是我线程池最大连接数是1万条,而终端只有50台左右,怎么会出现超过最大连接数的现象呢?是否是连接没有释放的原因?对线程池还是不太了解,请高手指教一二
qiufeng1989916 2013-03-11
  • 打赏
  • 举报
回复
如果内存溢出也应该报错,但是偏偏没有任何报错信息。
qiufeng1989916 2013-03-11
  • 打赏
  • 举报
回复
谢谢大家的回答,我是楼主。在我程序中,没有主动断开过socket连接,我是用while(true)来等待socket连接的,程序运行四五天后,大部分socket的就连不上了。重起后又正常。
yyw6637 2013-03-11
  • 打赏
  • 举报
回复
内存占满后会内存溢出
  • 打赏
  • 举报
回复
连接不上是因为socket已经关闭了?服务器这边是不是要检测线程池是否已满。需要一个专门接待的主socket线程否则接待、判断线程池是否可用、不可用给客户端一个消息,保证主socket独立并且正常运行,是否要加入心跳机制。
  • 打赏
  • 举报
回复
如果jvm能在溢出前回收不用的,不会死机,这要看jvm的机制了。

50,535

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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