Java的selector.select()阻塞线程?

问题描述 投票:0回答:2

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

在我的运行函数中我定义了:

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

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

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

java multithreading sockets nio
2个回答
4
投票

文档说,

该方法执行阻塞选择操作。仅当至少选择一个通道、调用该选择器的唤醒方法或中断当前线程(以先到者为准)后,它才会返回。

所以它应该阻塞直到选择一个通道。

对于非阻塞选择/繁忙循环,请尝试 selectNow 方法。


0
投票

非常感谢。与 selectNow,不被阻止。 我的程序是在 while (true) {...;readCount = selecter.select();...;} 中,但是为了缩短这个组中 post 的代码,拨打一个电话看看是否可以通过。我正在基于一个非常旧的应用程序工作,它是带有 org.xsocket 的 NIO no-block。调用selector.select(),所以我拿了,但是升级了依赖,用java.nio替换org.xsocket。你太棒了! 再次感谢您,

© www.soinside.com 2019 - 2024. All rights reserved.