场景:我需要在调用2个API之间等待10秒。因为BE需要时间来更新,如果我们立即调用第二个API,它不会给予预期的输出。我使用Thread.sleep进行等待,它工作正常,但想检查是否有其他方法来实现它。
Thread.sleep
mrphzbgm1#
Awaitilitylib是你想要的,它根据条件等待(类似于Selenium中的Explicit wait)。
用户指南:https://github.com/awaitility/awaitility/wiki/Usage
bzzcjhmw2#
您可以使用ScheduledExecutorService类:
ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor(); executorService.schedule(Classname::someTask, delayInSeconds, TimeUnit.SECONDS);
或者TimeUnit.sleep(),它与你已经在使用的Thread.sleep()非常相似:
try { TimeUnit.SECONDS.sleep(secondsToSleep); } catch (InterruptedException ie) { Thread.currentThread().interrupt(); }
drnojrws3#
用途:http://www.awaitility.org/
Awaitility.await().pollDelay(Duration.ofMillis(retryIntervalMillis)).until(() -> true);
或Guava(注意可能的SonarQube问题):https://guava.dev/releases/19.0/api/docs/com/google/common/util/concurrent/Uninterruptibles.html
3条答案
按热度按时间mrphzbgm1#
Awaitilitylib是你想要的,它根据条件等待(类似于Selenium中的Explicit wait)。
用户指南:https://github.com/awaitility/awaitility/wiki/Usage
bzzcjhmw2#
您可以使用ScheduledExecutorService类:
或者TimeUnit.sleep(),它与你已经在使用的Thread.sleep()非常相似:
drnojrws3#
用途:
http://www.awaitility.org/
或
Guava(注意可能的SonarQube问题):https://guava.dev/releases/19.0/api/docs/com/google/common/util/concurrent/Uninterruptibles.html