while死循环中的算法问题

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

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();           
    }       
}


主要还是那个关闭的问题。

写回答 关注

1回答

  • Wk_Mukker1
    2020-02-09 22:55:05

    资源浪费问题可以留给jvm的垃圾处理机制解决就可以了吧。你做的那个if判断没什么实际意义吧。

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

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

125013 学习 · 590 问题

查看课程

相似问题