qq_慕函数1127845
2020-02-09 19:04
while(true){ //2、调用accept() 方法,监听客户端的连接。 socket = serverSocket.accpet(); //创建一个线程,并通过这个线程与客户端进行通信。 //创建一个新的线程 ServerThread serverThread = new ServerThread(socket); //启动线程 serverThread.start(); }
老师的代码如上,这是一个死循环。
第一个问题:
就是ServerSocket不进行关闭,一旦有客户端退出,是不是会空耗资源?
第二个问题:
在等待连接的过程中,每一次循环都要建立一个新的ServerThread,即便socket是空的,但是过程还是会走完,这样是不是也算空耗资源?
第三个问题:
如果有客户端退出,在ServerSocket线程中会关闭相关资源,但是ServerSocket并没有关闭。这个ServerSocket是否依然存在?如果存在以何种状态存在?
我将创建新线程的过程添加一个if作为判断,用来避免创建空的ServerTread类,是否会更好些?
while(true){ //2、调用accept() 方法,监听客户端的连接。 socket = serverSocket.accpet(); //创建一个线程,并通过这个线程与客户端进行通信。 if(socket != null){ //创建一个新的线程 ServerThread serverThread = new ServerThread(socket); //启动线程 serverThread.start(); } }
主要还是那个关闭的问题。
资源浪费问题可以留给jvm的垃圾处理机制解决就可以了吧。你做的那个if判断没什么实际意义吧。
Java Socket应用---通信是这样练成的
125013 学习 · 590 问题
相似问题