2012-11-11 188 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

你说得对,我应该看到了。我只是相信将服务器置于非阻塞模式会使服务器循环始终运行。 –