日期:2014-05-20  浏览次数:20864 次

java程序中如果有死循环运行一段时间后会死掉吗?
是这样的,我写的一个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();
}

------解决方案--------------------
如果jvm能在溢出前回收不用的,不会死机,这要看jvm的机制了。
------解决方案--------------------
连接不上是因为socket已经关闭了?服务器这边是不是要检测线程池是否已满。需要一个专门接待的主socket线程否则接待、判断线程池是否可用、不可用给客户端一个消息,保证主socket独立并且正常运行,是否要加入心跳机制。
------解决方案--------------------
内存占满后会内存溢出
------解决方案--------------------
循环里面加上日志,看看到底添加了多少个线程。有可能客户端重连导致多添加线程了
------解决方案--------------------
朋友,解决了吗,我现在也碰到了个这样的问题··· socket连接四五天后就连接不上了
------解决方案--------------------
你服务器端 响应客户端连接请求的socket 没有设读超时吧。