有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在socket上使用客户端的java Performant多线程

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


共 (2) 个答案

  1. # 1 楼答案

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

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

  2. # 2 楼答案

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

    我建议调查外部图书馆,以及它们如何处理它们之间的联系。例如:http://netty.io/https://mina.apache.org/