为了账号安全,请及时绑定邮箱和手机立即绑定

while死循环中的算法问题

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 回答

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

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

while死循环中的算法问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信