Thread.sleep() in a while loop
2022-09-01 19:23:52
我注意到 NetBeans 警告我不要在我的 Java 代码中循环中使用 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编写的,因此在这种情况下,将该端更改为更“合作”不是一种选择。更新应用程序状态值的唯一选择是创建并发送 XML 消息,接收响应,分析它,然后提取我需要的信息。
任何建议或意见将是非常欢迎的。