我注意到NetBeans在我的Java代码中的while循环中警告我关于使用Thread.sleep(),所以我已经对此进行了一些研究。看起来,主要的问题是性能之一,当您的同步状态可能会在计数器仍然处于睡眠状态时成为现实,从而在等待下一次迭代时浪费挂钟时间。这一切都是完美的。
我的应用程序需要联系远程系统并定期轮询操作状态,等待操作完成后再发送下一个请求。代码逻辑上是这样做的:
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编写的,所以在这种情况下将其更改为“合作”不是一个选择。我更新应用程序的状态值的唯一选择是创建和发送XML消息,接收响应,解析它,然后提取我需要的信息。
任何建议或意见将是最受欢迎的。