JAVA技巧(充分利用资源,非阻塞的Socket链接) |
|
www.nanhushi.com 佚名 不详 |
我们建立普通的Socket时,我们必须等待连接建立成功,才能继续下一步工作,比如常见的代码如下 System.out.println("普通建立连接...."); Socket socket = new Socket("www.java2000.net", 80); System.out.println(socket.isConnected()); 我们的代码,必须等待第二行完成后,才能继续运行。考试大提示如果对方服务器比较慢,则会有比较长的时间处于阻塞状态。 下面的代码使用SocketChannel实现了非阻塞的链接。 package net.java2000.nio; import java.io.IOException; import java.net.InetSocketAddress; import java.net.Socket; import java.nio.channels.SocketChannel; /** * 考试大提示非阻塞的Socket链接。 * 可以在链接建立期间做一些别的操作。 */ public class SocketNonBlock { /** * 创建一个非阻塞的Socket通道。 * * @param hostName * 主机 * @param port * 端口 * @return Socket端口 * @throws IOException */ public static SocketChannel createSocketChannel(String hostName, int port) throws IOException { SocketChannel sChannel = SocketChannel.open(); sChannel.configureBlocking(false); sChannel.connect(new InetSocketAddress(hostName, port)); return sChannel; } public static void main(String[] args) { try { System.out.println("普通建立连接...."); Socket socket = new Socket("www.java2000.net", 80); System.out.println(socket.isConnected()); // 创建链接 SocketChannel sChannel = createSocketChannel("www.java2000.net", 80); // 可以通过判断是否连接,在链接成功建立前做一些其它的事情 while (!sChannel.finishConnect()) { System.out.println("等待非阻塞连接建立...."); try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(sChannel.isConnected()); } catch (IOException e) { e.printStackTrace(); } } } 运行结果 普通建立连接.... true 等待非阻塞连接建立.... 等待非阻塞连接建立.... true 总结: 非阻塞链接,可以让我们在等待链接建立期间做一些其它的工作,至少可以用来显示正在连接的一些动画啥的。 来源:考试大
|
|
|
文章录入:杜斌 责任编辑:杜斌 |
|
上一篇文章: JAVA技巧(有序整数集合a和b的交集函数) 下一篇文章: JAVA技巧(java长连接调用的方式) |
【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |
|
|