java - 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 构造函数告诉我已经创建了多个线程。为什么会这样?
解决方案
发生这种情况是因为浏览器会出于不同目的打开多个 TCP 连接。
推荐阅读
- omnet++ - 比较 lorawan 的 Flora(inet) 和 Ns3
- ruby-on-rails - “您正在连接到 Redis v3.2.9,Sidekiq 需要 Redis v4.0.0 或更高版本?”
- python-3.x - 如何在MongoDB中更新后保存对象数组?
- android - 如何从接口返回数据
- deployment - 已解决:即使本地主机说查询存在,Sanity.io 部署也会失败
- html - 如何在列表项空间的底部浮动文本?
- php - 登录laravel后页面刷新时419页面过期错误
- java - springboot项目eclipse上的错误Maven依赖(缺少工件-)
- android - RecyclerView 在 CoordinatorLayout 的 BottomSheet 中滚动
- python - python win32 使用 Windows Installer API 失败,但 perl 工作正常 - 我在 python 中做错了什么?