猿问
问一下java网络编程中serverSocket.accept是如何做到阻塞的?
如题所示,我看了下源码,不知道它是怎么阻塞在那里的,既没有循环也没有其他什么的。
慕姐8265434
浏览 1697
回答 3
3回答
Smart猫小萌
跟进去看,和FileInputStream一样,调用的native方法阻塞的吧
0
0
0
开心每一天1111
掉用 accept 方法后,服务端进入阻塞状态,应该是在操作系统层次上进行了阻塞,因为没有客户端的到来,所以没有必要浪费CPU的时间。
0
0
0
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 (;;) 循环完成了阻塞。
0
0
0
随时随地看视频
慕课网APP
相关分类
Java
我要回答