【问题标题】:What happens to a thread that calls accept()?调用accept()的线程会发生什么?
【发布时间】:2012-05-17 10:43:49
【问题描述】:

我有一个正在侦听套接字的服务器线程。用这样的声明:

Socket client = serverSocket.accept();

调用此接受函数的线程实际发生了什么? javadoc 说“侦听与此套接字建立的连接并接受它。该方法阻塞,直到建立连接。” “阻塞”是指一种忙于等待的形式,还是线程暂停/处于睡眠状态,直到它收到作为中断的请求或其他东西?此外,这种行为是否可以推广到套接字上的所有阻塞函数调用,如读取等...

【问题讨论】:

  • 块表示块。在accept() 返回之前,该线程不会继续。 (底层系统调用本身就是阻塞的。该部分的确切如何工作超出了 Java 的范围,因此从“系统”的角度来看它可能更相关......)

标签: java sockets network-programming


【解决方案1】:

简单地说,线程只是停止并等待建立连接。建立连接后,它将继续执行下一条指令。

【讨论】:

    【解决方案2】:

    这取决于实现。不仅是 Java 是如何实现的,还有 Java 正在调用的运行时库和操作系统系统调用是如何实现的。然而,阻塞等待文件句柄可用是操作系统可以优化的类型,因此这些调用倾向于是非忙等待。所以,你不能确定,但​​也许吧。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-13
      • 2015-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-22
      • 2011-08-05
      相关资源
      最近更新 更多