qq_凌空_2
2016-04-24 15:20
如果不用线程 直接在Server 类中加入while死循环同样是达到多客户端请求的效果啊!
提到多线程,往往还会想起另一个词:并发。前者是手段,后者是目的。
并发,顾名思义指同时发生,这里这个问题我所知只有多线程能解决。题主所提出的猜想咋一看似乎可行,实则不然。假如我们将讲师的代码改一改,将服务端给客户端发的消息改成用户在控制台输入,然后再发给客户端,而客户端也类似于此修改。修改之后按照题主的猜想,假设第一个客户端连上服务端后,用户不往控制台输入内容,那么客户端和服务端程序就会卡(阻塞)在相应的这一行,直到用户往里输入内容并以回车结束后才会继续执行程序。
这此期间,服务端一直停着,试问如何分身去响应第二、第三……,甚至更多用户的申请呢?
而多线程的并发,只要没有公用同一资源,相互之间独立运行、互不影响。讲个类比的故事。
沙僧要去流沙河做无本买卖,可一个人没胆量去就来求大师兄,于是大师兄就拔了一根毛一吹,变成一个分身陪沙僧去了;八戒要去高老庄强媳妇儿,可一个人抢不赢就来求大师兄,于是大师兄就拔了一根毛一吹,变成另一个分身陪八戒去了;……
这个故事里的大师兄就好好比是服务端,它负责等待各路鬼神来求他办事儿,并变出一个个相互独立、互不影响的分身去帮各路妖精干各自的事情。吹毛变分身的是大师兄,就好比是循环等待并处理申请的线程启动类;办事儿的是分身,就好比一个个被线程启动类启动的线程。
p.s. 不知道这个一时随想的类比例子是否贴切,容易理解?
给楼上+1
线程的好处在于同时进行不延迟,
加个while:第一个客户端响应完,执行完第二个才可以进入,也就是同一时间只能响应一个
利用线程 :可以同时执行serversocket.start(),即同时响应多个
Java Socket应用---通信是这样练成的
125006 学习 · 621 问题
相似问题