猿问

问一下java网络编程中serverSocket.accept是如何做到阻塞的?

如题所示,我看了下源码,不知道它是怎么阻塞在那里的,既没有循环也没有其他什么的。

慕姐8265434
浏览 1697回答 3
3回答

Smart猫小萌

跟进去看,和FileInputStream一样,调用的native方法阻塞的吧

开心每一天1111

掉用 accept 方法后,服务端进入阻塞状态,应该是在操作系统层次上进行了阻塞,因为没有客户端的到来,所以没有必要浪费CPU的时间。

GCT1015

调用了native方法进行了阻塞,具体和平台有关。 如果在mac下(unix),会进入java.net.PlainSocketImpl类的native void socketAccept(SocketImpl s)。 查看openjdk1.7的源码,/solaris/native/java/net/PlainSocketImpl.c中的Java_java_net_PlainSocketImpl_socketAccept方法中,有for (;;) 循环完成了阻塞。
随时随地看视频慕课网APP

相关分类

Java
我要回答