2012-05-08 21 views
0

我有一個偵聽套接字的服務器線程。用這樣的語句:調用accept()的線程會發生什麼?

Socket client = serverSocket.accept(); 

調用此accept函數的線程究竟發生了什麼? javadoc說:「偵聽一個連接到這個套接字並接受它,這個方法阻塞直到建立連接。」 「阻塞」是指一種繁忙的等待形式,還是線程暫停/處於休眠狀態,直到它獲得中斷或其他請求爲止?此外,這種行爲可以通用於socket等所有阻塞函數調用,例如read等...

+3

塊表示塊。該線程在accept()返回之前不會繼續。 (底層的系統調用本身就是阻塞的,這個部分工作的方式不在Java的範圍之內,所以從「系統」的角度來看它可能更加相關...) – 2012-05-08 22:08:34

+0

噢好吧。謝謝! – user1355348

回答

2

簡單地說,線程只是停止並等待連接。當建立連接時,它將繼續執行下一條指令。

-1

這取決於實施。不僅如何實現Java,而且實現了Java調用的運行時庫和OS系統調用的方式。但是,等待文件句柄可用的阻塞是OS可以優化的類型,因此這些調用傾向於爲非忙等待。所以,你不能確定,但​​也許。

+1

-1。沒有答案。 – EJP

相關問題