我注意到NetBeans警告我不要在Java代码中的while循环中使用Thread.sleep(),所以我对这个主题做了一些研究。这似乎主要是一个性能问题,当计数器仍处于睡眠状态时,您的while条件可能会变为真,从而在您等待下一次迭代时浪费时钟时间。这一切都很有意义。
我的应用程序需要联系远程系统并定期轮询操作的状态,等待操作完成后再发送下一个请求。目前,代码在逻辑上是这样做的:
String state = get state via RPC call
while (!state.equals("complete")) {
Thread.sleep(10000); // Wait 10 seconds
state = {update state via RPC call}
}
假设环境正在检查远程操作(这是一个比较昂贵的进程,因为它会运行几秒钟),那么在while循环中使用Thread.sleep()是否有效?有没有更好的方法来构建这个逻辑?我见过一些可以使用Timer类的例子,但我看不出它的好处,因为它似乎仍然归结为上面相同的简单逻辑,但增加了更多的复杂性。
请记住,在这种情况下,远程系统既不在我的直接控制之下,也不是用Java编写的,因此在这种情况下,将其更改为更“协作”是不可取的。更新应用程序的state值的惟一选择是创建并发送一条XML消息,接收响应,解析它,然后提取所需的信息。
任何建议或意见都是非常受欢迎的。
https://stackoverflow.com/questions/8792786
复制相似问题