2012-11-11 111 views
-3

我想在它自己的主題中運行一個NIO服務器。Java selector.select()阻塞線程?

在我運行功能我定義:

while(running) 
{ 
    System.out.println("Server running!"); 
    try 
    { 
     this.selector.select(); 
    } 
    catch (IOException e) 
    { 
     e.printStackTrace(); 
    } 
} 

運行循環只運行一次,然後就卡住了。 沒有整個嘗試塊它的作品。

它selector.select()阻塞莫名其妙?

回答

2

文檔說,

此方法執行一個阻塞選擇操作。只有在選擇了至少一個通道後,纔會返回該選擇器的喚醒方法,或者當前線程中斷,以先到者爲準。

所以它應該阻塞,直到選擇一個通道。

+0

意思是說,只要我連接一個客戶端,它就會阻塞它? –

+1

它應該阻塞,直到選中某個通道,中斷該線程或者喚醒線程。這個文件很清楚。 – Zaq

+0

你說得對,我應該看到了。我只是相信將服務器置於非阻塞模式會使服務器循環始終運行。 –