如何编写多线程算法来发现可用套接字

时间:2016-04-05 08:25:17

标签: java multithreading sockets

现在我有顺序单线程算法,如下所示:

boolean conn = false;

for (InetSocketAddress addr : addrs) {
    while (!conn) {
        SocketChannel ch = SocketChannel.open();
        ch.configureBlocking(true);
        ch.socket().setTcpNoDelay(tcpNoDelay);
        ch.socket().setKeepAlive(true);

        try {
            ch.socket().connect(addr, connTimeout);
            conn = true;
            ....
        }
        catch (...) {
           log("Not available: " + addr);
        }

        if (conn) 
         break;
    }
}

但在某些情况下,我可能会有相当大的地址列表,可用地址可能在此列表的末尾 - 这将导致可用地址的缓慢发现,因为我需要逐个检查所有地址。

所以我的问题 - 如何实现将尝试连接到不同线程中的多个地址的算法,并在找到第一个可用地址后退出?

如果没有可用的地址,也应退出此算法。

任何想法如何编码?

1 个答案:

答案 0 :(得分:0)

以非阻止模式执行所有连接,然后使用Selector上的OP_CONNECT查找连接何时以及是否成功。