首页 > 解决方案 > ServerSocket.accept 给了我多个连接,虽然我只连接一次

问题描述

我有一个 ExecutorService 为每个连接创建一个新线程:

boolean running;
Socket socket;
ExecutorService executorService= Executors.newCachedThreadPool();
ss=new ServerSocket(port);
while(running){
        socket=ss.accept();
        executorService.submit(new ConnectionThread(socket));
        }

ConnectionThread 构造函数如下所示,run 方法太长,无法在此处发布:

Socket socket;
ConnectionThread(Socket socket){
            System.out.println("connectionThread running...");
            this.socket=socket;
        }

当我在浏览器中刷新页面时,ConnectionThread 构造函数告诉我已经创建了多个线程。为什么会这样?

标签: javasocketsexecutorserviceserversocket

解决方案


发生这种情况是因为浏览器会出于不同目的打开多个 TCP 连接。


推荐阅读