调用accept()的线程会发生什么?

时间:2012-05-08 22:07:29

标签: java sockets network-programming

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

Socket client = serverSocket.accept();

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:-1)

这取决于实施。不仅如何实现Java,还实现了Java正在调用的运行时库和OS系统调用的方式。但是,阻止等待文件句柄可用是操作系统可以优化的类型,因此这些调用使成为非忙等待。所以,你不能确定,但​​也许。