java socket多线程问题,我写了一个socket tcp服务端,高手来进来看下,谢啦。是关于多客户端并联的问题

我的处理方法是,每来一条tcp连接,我就为这一个客户端开一条线程进行数据通信解析处理。那么,如果有5000甚至更多的客户端来进行连接,我将有可能同时产生5000+线程,而... 我的处理方法是,每来一条tcp连接,我就为这一个客户端开一条线程进行数据通信解析处理。那么,如果有5000甚至更多的客户端来进行连接,我将有可能同时产生5000+线程,而我查过线程的最大数取决于可用虚拟内存的大小,默人一个线程可拥有1M的栈空间,所以一般来说也只可以创建4000+个线程(虚拟内存是4G的话)。。。
就算可以创建5000+个线程满足这些客户端进行连接,那么我想这么多的线程估计服务器CPU也吃不消。。。

不知道各位高手有没有遇到处理这样的情景,比如QQ是怎么做的,给小弟点建议啥的。。。不甚感激。另外我们这项目只能采用tcp通信。

PS:一般我们创建一条线程都是通过new一个对象,然后.start()进行启动线程。我们一般认为start()方法执行结束后也就意味线程已经停止对象也就没有用了该进行销毁了。可是我测试发现,就算start()已经执行结束了,对象还在,还是可以读取到对象的属性。。。说明对象并没有被销毁。这样就有一个问题,如果同时存在很多线程比如5000+,那就会产生很多的没有被销毁的对象内存垃圾。。。我又想到了对象单例模式,可是我觉得我用不上,因为启动线程的时候我给线程里面变量赋值是通过构造函数的方式。。。如下代码显示:
public class ShujubaoThread extends Thread {
byte[] bs;
public ShujubaoThread(byte[] mybt){
this.bs=mybt;
}

public void run() {
//开始解析数据包
int length=bs.length;

//。。。

//解析数据包结束
}
public static void main(String[] strings){
//第1个客户端建立连接,解析收到的数据包
ShujubaoThread t1=new ShujubaoThread(new byte[1]);
t1.start();
//第2个客户端建立连接,解析收到的数据包
ShujubaoThread t2=new ShujubaoThread(new byte[1]);
t2.start();
//第3个客户端建立连接,解析收到的数据包
ShujubaoThread t3=new ShujubaoThread(new byte[1]);
t3.start();
//第4个,第5个,第6个,第7个,第8个,第9个...
}

}
不知道我这做法对不对,或者有什么更好的方法。。。

我是第一次写socket服务端,对线程也不是太熟,希望给我高手指点一二

拜谢。。。 再次拜谢。。。
展开
 我来答
liangwenjiecp
2011-06-28 · TA获得超过113个赞
知道小有建树答主
回答量:188
采纳率:0%
帮助的人:77.8万
展开全部
不对,你应该单独写个一个处理线程类,如果需要的连接就new一下,因为每次new一下,线程的名字都不一样,但如果后期要用到销毁的时候,最好写一个hasMap存储这些线程,当下线时,就根据values来销毁或遍历一下hasMap,获取到线程的名字,然后就destroy();
韩顺平java视频教程里的qq项目里有详细的解说!
追问
恩,我现在就是想知道,如果需要一下子连接5000+个客户端,也就是可能同时需要new 5000+条线程,这么多线程肯定服务器会够呛,有没有好的解决办法
追答
如果你有这么多的客户,你就要有强大的服务器!你知道腾讯的服务器有几多吗?这个不是技术就是能解决的,还是钱的问题!
roserouge
2011-06-28 · TA获得超过462个赞
知道小有建树答主
回答量:1554
采纳率:0%
帮助的人:504万
展开全部
。。。那你就先一样一样学 然后再往起装 就光java的多线程就够给你讲一周你都弄不明白的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sabrina82
2011-06-28
知道答主
回答量:28
采纳率:0%
帮助的人:4.8万
展开全部
抱歉,我也不懂的哦
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式