Java 服务器/客户端停止1个线程=1个客户端

Java 服务器/客户端停止1个线程=1个客户端,java,multithreading,sockets,Java,Multithreading,Sockets,协议:TCP 我有一个带有SocketServer的服务器,它接受客户端并将套接字(由ss.accept()返回)放入一个数组中 我有一个线程,当套接字准备好读取(客户端发送的数据)时,需要通知它。 这个线程将把请求分派给其他线程进行处理,因此这个初始线程所做的事情非常简单和快速 可能吗 我真的希望避免1个线程=1个客户端,让1个线程处理N个客户端。我想您可能想看看本文中讨论的一些非阻塞IO方面 此外,我认为的答案将帮助你 通常,非阻塞IO使用回调—当数据可用时,您的代码需要注册一个“回调”处理

协议:TCP

我有一个带有SocketServer的服务器,它接受客户端并将套接字(由
ss.accept()
返回)放入一个数组中

我有一个线程,当套接字准备好读取(客户端发送的数据)时,需要通知它。 这个线程将把请求分派给其他线程进行处理,因此这个初始线程所做的事情非常简单和快速

可能吗


我真的希望避免1个线程=1个客户端,让1个线程处理N个客户端。

我想您可能想看看本文中讨论的一些非阻塞IO方面 此外,我认为的答案将帮助你


通常,非阻塞IO使用回调—当数据可用时,您的代码需要注册一个“回调”处理程序。在这种情况下,处理程序将向您的单个线程发布消息或数据,这必须是线程安全的,才能处理并发通知/回调。

1线程多个客户端会导致锁/死锁/客户端长时间等待。你确定吗?这只是为了教育目的,但如果我有10000个客户,我该怎么办?1线程=1客户端将不会。。。好?大多数服务器端解决方案都使用连接/线程池来解决这个问题。@MarkBakker您能解释一下吗?我正在搜索,但我不明白一个线程池(例如:5)如何在一个10k套接字阵列上等待?Thanks@MarkBakker,我本打算更详细地说,但我的否决票表明你对我的回答感到不安,尽管你的评论是在我写的时候提出的。为了向OP提供高质量的信息,您能否提供自己的答案,并包括对条件变量的讨论。