不通过多线程 似乎也能完成多客户端请求

来源:3-5 使用多线程实现多客户端的通信

qq_凌空_2

2016-04-24 15:20

如果不用线程 直接在Server 类中加入while死循环同样是达到多客户端请求的效果啊!

写回答 关注

3回答

  • SoyaDokio
    2016-07-01 02:06:50

    提到多线程,往往还会想起另一个词:并发。前者是手段,后者是目的。

    并发,顾名思义指同时发生,这里这个问题我所知只有多线程能解决。题主所提出的猜想咋一看似乎可行,实则不然。假如我们将讲师的代码改一改,将服务端给客户端发的消息改成用户在控制台输入,然后再发给客户端,而客户端也类似于此修改。修改之后按照题主的猜想,假设第一个客户端连上服务端后,用户不往控制台输入内容,那么客户端和服务端程序就会卡(阻塞)在相应的这一行,直到用户往里输入内容并以回车结束后才会继续执行程序。

    这此期间,服务端一直停着,试问如何分身去响应第二、第三……,甚至更多用户的申请呢?

    多线程的并发,只要没有公用同一资源,相互之间独立运行、互不影响。讲个类比的故事。

    沙僧要去流沙河做无本买卖,可一个人没胆量去就来求大师兄,于是大师兄就拔了一根毛一吹,变成一个分身陪沙僧去了;八戒要去高老庄强媳妇儿,可一个人抢不赢就来求大师兄,于是大师兄就拔了一根毛一吹,变成另一个分身陪八戒去了;……

    这个故事里的大师兄就好好比是服务端,它负责等待各路鬼神来求他办事儿,并变出一个个相互独立、互不影响的分身去帮各路妖精干各自的事情。吹毛变分身的是大师兄,就好比是循环等待并处理申请的线程启动类;办事儿的是分身,就好比一个个被线程启动类启动的线程。

    p.s. 不知道这个一时随想的类比例子是否贴切,容易理解?

  • Lwan
    2016-05-10 12:40:23

    给楼上+1

  • IOldCat
    2016-04-24 19:21:41

    线程的好处在于同时进行不延迟,

    加个while:第一个客户端响应完,执行完第二个才可以进入,也就是同一时间只能响应一个

    利用线程 :可以同时执行serversocket.start(),即同时响应多个

    花黑暗里开放

    正解!

    2016-05-12 15:44:06

    共 1 条回复 >

Java Socket应用---通信是这样练成的

分享的是 Java 中的网络编程,使用Socket实现网络聊天通信

125006 学习 · 621 问题

查看课程

相似问题