在单线程的一情况下,服务器(serverSocket)端接收到一个客户连接,就与客户进行通信,通信完毕后 断开连接,然后再接收下一个客户连接。假如同时有多个客户请求连接,这些客户请求就必须排队等候(默认由操作系统限定) 服务器的响应,即服务器无法同时与多个客户通信。 解决这种办法可以:使用多个线程同时为多个客户提供服务,即提高服务器的并发性。 方法如下 1:为每个客户分配一个线程。 2:创建个线程池,其目的也是为每个客户分配一个线程(JDK也提供现成的线程池)。
注意:使用线程池的优点 1)如果用第一种方式,对每个客户分配一个新的线程。当工作线程与客户通信结束后,这个线程将被 销毁,当服务器与许多客户进行通信,并且通信的时间比较短。那么可能会出现服务器创建新线程和销毁 通信结束的线程的开销比实际与客户通信(处理业务)的开销还大。 2)如果频繁的创建和销毁线程会导致线程切换线程频繁,同样使得系统开销增大 3:使用非阻塞的通信机制。