为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕姐8265434 2019-02-28 05:45:20
如题所示,我看了下源码,不知道它是怎么阻塞在那里的,既没有循环也没有其他什么的。
查看完整描述

3 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

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

查看完整回答
反对 回复 2019-03-01
?
开心每一天1111

TA贡献1836条经验 获得超13个赞

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

查看完整回答
反对 回复 2019-03-01
?
GCT1015

TA贡献1827条经验 获得超4个赞

调用了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 (;;) 循环完成了阻塞。

查看完整回答
反对 回复 2019-03-01
  • 3 回答
  • 0 关注
  • 1696 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信