所以我正在开展这个娱乐项目以了解更多有关java网络的知识,到目前为止,我遇到的每个教程或文档都涉及为每个客户端连接创建一个新线程以等待输入。我想知道是否可以使用单个线程处理客户端连接列表?我尝试过类似下面的代码,但是没有用。
while(true){
for(Client c : list){
DataInputStream dis = new DataInputStream(c.getSocket().getInputStream());
if(dis.readLine()!=null){
//Code
}
dis.close();
}
}
答案 0 :(得分:2)
是的,使用NIO包的单个线程是可行的。这将允许您在单个线程中的通道之间设置非阻塞IO和多路复用。这不是一件轻而易举的事,但这是一个不错的例子here。
上面的示例将阻止readLine()调用,直到Socket上有数据可用。如果您的某个客户端正在等待数据,则while循环将永远不会继续,并且您将永远不会为其他客户端提供服务。