Java 如果两个客户端同时向使用while循环接受请求的ServerSocket发送请求,会发生什么情况

Java 如果两个客户端同时向使用while循环接受请求的ServerSocket发送请求,会发生什么情况,java,Java,我有两个客户在两台不同的机器上,我不知道他们什么时候会发送请求 这是我必须使用选择器和服务器socketchannel的场景吗 例如: public class Server{ public static void main(String[] args) { try( ServerSocket serverSocket = new ServerSocket(1234) ){ while(tr

我有两个客户在两台不同的机器上,我不知道他们什么时候会发送请求

这是我必须使用
选择器
服务器socketchannel
的场景吗

例如:

public class Server{

    public static void main(String[] args) {

        try(
            ServerSocket serverSocket = new ServerSocket(1234)
           ){

               while(true) {
                    serverSocket.accept();
                    Thread.sleep(5*1000);
                    //and while its sleeping, second client sends request
               }
           }catch(Exception e){}
    }
}
这是我必须使用选择器和服务器socketchannel的场景吗

没有。一个更常见的解决方案是每个客户端有一个线程——当您接受一个调用时,创建一个新线程(或使用线程池中的现有线程)并使用它来处理该连接。原始线程再次调用
accept
(立即-无需睡眠),并为下一个连接生成新线程,等等

(异步IO当然有很多优点,但您不会被迫使用它。)

这是我必须使用选择器和服务器socketchannel的场景吗

没有。一个更常见的解决方案是每个客户端有一个线程——当您接受一个调用时,创建一个新线程(或使用线程池中的现有线程)并使用它来处理该连接。原始线程再次调用
accept
(立即-无需睡眠),并为下一个连接生成新线程,等等


(异步IO当然有一些优点,但您不必被迫使用它。)

您不必使用
选择器
/
服务器socketchannel

相反,对于一个非常简单的服务器,您可以简单地启动一个新线程来处理客户端连接。有关如何使用每个客户端的新线程执行此操作的示例,请参阅。

您不必使用
Selector
/
ServerSocketChannel

相反,对于一个非常简单的服务器,您可以简单地启动一个新线程来处理客户端连接。有关如何使用每个客户端的新线程执行此操作的示例,请参阅。

为什么要睡在那里?如果没有睡眠,它将正常工作,即您将获得2个连接。有了睡眠,第二个将不得不毫无理由地等待5秒钟。我建议你阅读基本的套接字教程,你似乎需要它。你为什么要睡在那里?如果没有睡眠,它将正常工作,即您将获得2个连接。有了睡眠,第二个将不得不毫无理由地等待5秒钟。我建议您阅读基本套接字教程,您似乎需要它。