Java selector.select()阻塞线程?

时间:2012-11-11 19:06:33

标签: java multithreading sockets nio

我正在尝试在它自己的线程中运行NIO服务器。

在我的跑步功能中,我定义了:

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

运行循环只运行一次然后卡住了。 如果没有整个try块,它就可以工作。

它以某种方式阻塞了selector.select()吗?

1 个答案:

答案 0 :(得分:4)

文档说,

  

此方法执行阻止选择操作。只有在选择了至少一个通道,调用此选择器的唤醒方法,或者当前线程被中断(以先到者为准)时,它才会返回。

因此它应该阻止直到选择一个频道。