Java 在套接字上与客户端执行多线程

Java 在套接字上与客户端执行多线程,java,multithreading,sockets,serversocket,Java,Multithreading,Sockets,Serversocket,目前我有一个项目,我们开发了一个JavaTexasHoldem应用程序。当然,这个应用程序是基于客户机-服务器套接字系统的。我正在将所有加入的客户端(我使用socketServer.accept()方法获取它们)保存在ArrayList中。目前,我为每个加入的客户端创建了一个线程,用于永久性地检查客户端是否向服务器发送任何数据。我的同学告诉我,如果我创建一个大线程,它将遍历整个客户端ArrayList,并检查每个客户端inputstreamreader。我应该相信他吗?如果你的应用程序有很多客户

目前我有一个项目,我们开发了一个JavaTexasHoldem应用程序。当然,这个应用程序是基于客户机-服务器套接字系统的。我正在将所有加入的客户端(我使用
socketServer.accept()
方法获取它们)保存在
ArrayList
中。目前,我为每个加入的客户端创建了一个线程,用于永久性地检查客户端是否向服务器发送任何数据。我的同学告诉我,如果我创建一个大线程,它将遍历整个客户端
ArrayList
,并检查每个客户端
inputstreamreader
。我应该相信他吗?

如果你的应用程序有很多客户端,那么为每个套接字创建一个线程不是一个好主意


我建议调查外部库以及它们如何处理它们之间的联系。例如:,

这两种方法都不可行。每个连接有一个线程将很快耗尽任何加载系统中的资源。让一个线程ping一个循环中的所有连接将产生糟糕的性能


正确的方法是在套接字上进行多路复用-具有相同数量的线程(16,为什么不),在这16个线程之间分配所有套接字,并使用select()variant在这些套接字上进行多路复用-Java中对此可用的任何方法。

如果使用阻塞的套接字,则不能让1个线程读取所有套接字的输入流,因为第一个读取调用将阻塞,直到该客户端作为发送数据,这意味着您将阻止线程从其他流读取数据。但是,您可以切换到非阻塞内插,然后在单个线程上处理所有读/写操作(如果需要,甚至可以接受同一线程上的连接)。看看你的英语好吗。为了回答你的问题,让我们从电影语录中抽出来。你相信他吗?你的心告诉你什么?如果答案是肯定的,那么就去做。如果没有,那么研究/做你和他的方法来建立你的信心并证明你的理由。当有疑问时,信任代码,而不是人。至少在开发人员的范围内,谢谢你的回答。我会调查一下内蒂,谢谢你的回答。我将研究一下这些外部库。