线程睡眠连接

时间:2014-06-15 23:16:24

标签: java multithreading

我有一个网络客户端,它在循环中尝试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中有哪些选项可以做到这一点?

1 个答案:

答案 0 :(得分:1)

这个问题的答案取决于NClient的实施。通常情况下,我会使用connect timeout。以下示例说明了如何使用Socket执行此操作。我不知道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 timeout

相关问题