我不确定我的描述是否正确,但这里有解释。
我有一个客户端消息处理系统,看起来很像这样:(它在单独的线程中运行)
public void run() {
String line;
while(true)
{
try
{
while ((line = reader.readLine( )) == null) { Thread.sleep(10); };
if (line.toUpperCase().startsWith("PING ")) {
// Autorespond to server pings
server.Write("PONG " + line.substring(5));
}
else {
setChanged();
notifyObservers(line);
}
}
catch (Exception e)
{
//do something here
}
}
}
我真的,真的,想做的是替换这条线:while ((line = reader.readLine( )) == null) { Thread.sleep(10); }
用别的东西,别的东西,这不是一个本质上的无限循环。
代码分解 循环永远直到行包含一些数据。如果是 ping 请求,则自动响应并重新开始。如果不是,将收到的消息通知观察者,然后重新开始。
观察者模型有效,不用担心。阅读器实际上确实可以正常工作……但是它消耗了很多处理器,它们处于无限循环中,检查事物。
问题
我如何使用某种并发、等待或任何模型,以便线程本身将简单地等待,直到 BufferedReader 实际有数据要读取?有没有办法做到这一点,或者Thread.Sleep(10)
我实际上添加了最好的方法来防止无限期地吃掉我所有的处理器。