Java 线程睡眠连接

Java 线程睡眠连接,java,multithreading,Java,Multithreading,我有一个网络客户端,它在一个循环中尝试3次连接到服务器。在此期间,我使用睡眠线程。有没有办法替换Thread.sleep(700)带有一些代码,这些代码在客户端连接后立即跳过等待时间 NClient pc; if (pc == null) { try { Thread.sleep(700); } catch (InterruptedException x) { //TODO } if (pc != nul

我有一个网络客户端,它在一个循环中尝试3次连接到服务器。在此期间,我使用睡眠线程。有没有办法替换
Thread.sleep(700)
带有一些代码,这些代码在客户端连接后立即跳过等待时间

NClient pc;

if (pc == null)
{
    try
    {
        Thread.sleep(700);
    }
    catch (InterruptedException x)
    {
        //TODO
    }

    if (pc != null)
    {
        outPrint.println("Connected");
        break;
    }
}

我希望通过缩短正在进行连接协商的等待时间来改善用户体验。Java中有哪些选项可以做到这一点?

这个问题的答案取决于
NClient
的实现。通常,我会为此使用
连接超时
。下面的示例说明如何使用
套接字执行此操作。我不知道什么是
NClient
,所以很遗憾,我不能给你一个
NClient
示例

创建尝试连接的方法-最多3次

Socket connectToServer() {
  Socket socket = new Socket();
  final int connectTimeoutMs = 700;
  for (int i=0; i<3; i++) {
    try {
      // the call to connect blocks the current thread for a maximum of 700ms if it can't connect
      socket.connect(new InetSocketAddress("localhost", 8080), connectTimeoutMs);
    } catch (IOException e) {
      // failed to successfully connect within 700 milliseconds
      e.printStackTrace();
    }
  }
  return socket;
}
Socket socket = connectToServer();
if (socket.isConnected()) {
  // do stuff with the valid socket!
}
简而言之,使用
连接超时

为什么??connect()方法仍将阻止。你不需要再睡一会儿。