关于java socket多线程问题:
网上很多例子都是同样一个思路:
1 new一个线程池threadpool
2 main函数里面, while(true) 一直ServerScoket来accept新建立的socket
3 将新建立的socket封装到一个runnable,然后交给线程池threadpool来处理
网上关于多线程socket的例子几乎都是这样,
虽然这样支持多个client来同时访问server,但是client的数量就有了限制
那就是线程池的大小,因为将一个socket交给一个runnable的话,当socket 在read的时候,还是在阻塞住这个线程
于是乎,只要socket没有断开,那么最多支持线程池大小个数的client,这是不合理的
请问,对于多线程 socket,有没有其他的解决方法?(不用nio的select模型,只用socket+多线程)
------解决思路----------------------
就是这么写的。
因为还有其他 方面的原因,一个服务器上面的连接数就是有一定的限制的。你有兴趣可以找一下poll/epoll,这差不多也就是10年前开始的, LInux 的2.6或是linux 2.4的某个内核版本开始的。
从JVM的情况来看,差不多最多可以1000多个Thread,也许调优的好,还可以更多,但应该3000也是极限了。所以,一般Tomcat之类服务器也就是1000多个连接,但这个数字,其基本上也是和当时系统的内核匹配的。