我正在尝试在它自己的线程中运行 NIO 服务器。
在我的运行函数中我定义了:
while(running)
{
System.out.println("Server running!");
try
{
this.selector.select();
}
catch (IOException e)
{
e.printStackTrace();
}
}
运行循环只运行一次,然后就卡住了。 没有整个 try 块它就可以工作。
它的selector.select()以某种方式阻塞?
文档说,
该方法执行阻塞选择操作。仅当至少选择一个通道、调用该选择器的唤醒方法或中断当前线程(以先到者为准)后,它才会返回。
所以它应该阻塞直到选择一个通道。
对于非阻塞选择/繁忙循环,请尝试 selectNow 方法。
非常感谢。与 selectNow,不被阻止。 我的程序是在 while (true) {...;readCount = selecter.select();...;} 中,但是为了缩短这个组中 post 的代码,拨打一个电话看看是否可以通过。我正在基于一个非常旧的应用程序工作,它是带有 org.xsocket 的 NIO no-block。调用selector.select(),所以我拿了,但是升级了依赖,用java.nio替换org.xsocket。你太棒了! 再次感谢您,