Multithreading 我的服务器被线程卡住了。睡眠?

Multithreading 我的服务器被线程卡住了。睡眠?,multithreading,server,heartbeat,Multithreading,Server,Heartbeat,我将此代码作为每个客户端的线程执行,以检测服务器中的用户断开连接: private void detectDisconnect (Client user) { try { boolean listening = true; while (listening) { System.out.println("<" + user.getUserName() + "> Sleeping...");

我将此代码作为每个客户端的线程执行,以检测服务器中的用户断开连接:

private void detectDisconnect (Client user)
{ 
    try  
    {
        boolean listening = true;

        while (listening)
        { 
            System.out.println("<" + user.getUserName() + "> Sleeping...");
            user.setDisconnected(true); 
            send(user, "heartBeat#"); 
            Thread.sleep(Main.LATENCY);
            System.out.println("<" + user.getUserName() + "> I wake up!");

            if (user.isDisconnected()) { listening= false; exitClient(user);                 
        }  
    } 
    catch (InterruptedException e) { e.printStackTrace(); }
}
private void detectDisconnect(客户端用户)
{ 
尝试
{
布尔监听=真;
边听
{ 
System.out.println(“睡眠…”);
user.setDisconnected(true);
发送(用户,“heartBeat#”);
Thread.sleep(Main.LATENCY);
System.out.println(“我醒来了!”);
if(user.isDisconnected()){listing=false;exitClient(user);
}  
} 
catch(InterruptedException e){e.printStackTrace();}
}
休眠前的服务器将user.setDisconnected(true);如果客户端在唤醒前发送响应,我将更改为user.setDisconnected(false);在其他方法()中,因此此线程不会退出客户端,除非在延迟期间没有收到任何消息…这工作正常,但有时我可以随机检查“Sleep…”消息后是否没有出现消息“I wake up!”(!!!),最糟糕的是,我的所有程序都被冻结了,因此服务器不再侦听或向任何客户端发送消息:(即使这些线程在单独的线程中执行!)

我不知道为什么会发生这种情况,但我认为所有的问题都是由Thread.sleep()中的某个最终致命错误引起的。这是可能的?但是我在catch(异常e){}中没有收到任何错误消息,所以我要发疯了


请帮帮忙!!

Main.LATENCY的值是多少?Thread.sleep()的代码是多少?protected final static int LATENCY=10000;LATENCY是Thread.sleep()的代码吗与上面的
线程相同。在这种情况下,Sleep
真的很糟糕。它会影响可伸缩性。最好进行异步调用。我将首先放置一个更通用的
捕获(异常e)
您可以编辑您的问题而不是在注释中添加代码吗?这还不清楚。在我看来,这些函数可能会引发异常,也许问题就在这里。