2014-06-15 138 views
0

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

+2

为什么?无论如何,connect()方法都会阻塞。你不需要再睡觉。 – EJP

回答

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