java中socket与多线程_Java socket编程服务器多线程单线程对比

本文通过实例演示了Java中Socket编程时,单线程服务器与多线程服务器的区别。在单线程情况下,新连接可能会被阻塞,而多线程则能有效避免这个问题,确保每个连接都能被及时处理。同时,文章指出操作系统对socket连接有一定的缓冲限制,长时间无响应的连接会被客户端自动断开。
摘要由CSDN通过智能技术生成

对于外部的socket连接,操作系统会提供一个缓冲区存储这些连接,这个连接数是有上限的,当超过这个连接的上限时,新的socket再连接服务器时,就会失败。而对于已经连接到服务器的socket其实也并不是真得连接到了,它们只是被操作系统缓存起来,还需要等待服务器负责对外通讯的进程处理上一个连接之后,才能真得连接到服务器。

但如果服务器采用多线程的方法,即每新到一个socket连接,就生成一个新的子线程去处理它,那么后到的socket就不会被阻塞。

具体操作流程如下:

首先编写Java 客户端和服务端程序(服务端程序有两个,分别是多线程和单线程的)

首先运行服务端程序(单线程),然后再先后运行两个客户端程序,分别标识为first和second,我们先用second  发送消息结果发现并不能发送出去,服务器端一直没有打印出second发送的消息,当我们用fisrt发送消息之后,发现服务器紧随其后就打印出了second发送的消息。这里还发现一个有意思的现象就是,当我们的second客户端在长时间连接未收到响应后,已经自己终止了连接,我们的服务端还是打印出了它之前发送的消息(应该是操作系统的作用)。

上面是单线程的,当我们用多线程时,发现虽然first比second先连接,但它并不会阻塞second向服务端发送消息,second发送的消息可以先一步到达服务端。

客户端连接代码:try{

//ServerSocket serverSocket=null;

Socket socket=null;

Scanner scan=new Scanne

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值