【问题标题】:Break from while loop after 20 seconds20 秒后退出 while 循环
【发布时间】:2019-08-28 13:36:26
【问题描述】:

如何在 20 秒后中断 while 循环?我想避免使用线程。

while (var) {
    // ...do something

    if (20secondsIsPassed) {
        break;
    }
}

【问题讨论】:

  • 简单的方法是使用System.currentTimeMillis来测试系统时钟。
  • 进入前先取一个时间,然后在每次迭代中取一个时间差,如果时间差超过20秒,退出while循环。
  • @StephenC 我认为currentTimeMillis 可以返回一个小于上一次调用的值(可能不太可能,但可能)取决于底层系统时钟,这就是为什么应该使用nanoTime 来测量持续时间。
  • 这应该是不可能的。但是,可以“调整”系统时钟。并且它是特定于操作系统的 1) 是否允许对给定时钟进行调整,以及 2) 应用程序是否会注意到这一点。

标签: java if-statement time while-loop jvm


【解决方案1】:

如果您的while 循环中有if,用于检查已用时间,那么您将不会有20 秒,而是至少 20 秒。最简单的方法是这样的:

LocalDateTime then = LocalDateTime.now();
while (true) {
    // logic
    if (ChronoUnit.SECONDS.between(then, LocalDateTime.now()) >= 20) break;
}

【讨论】:

  • 这会给你至少 21 秒的时间。改用 >= 和更细粒度的时间单位。
【解决方案2】:

只要知道每一秒代表 1000 毫秒,您就可以进行以下计算:

long seconds = System.currentTimeMillis();
    while (var && (seconds + (20 * 1000) > System.currentTimeMillis())) {
        // ...do something
    }

【讨论】:

    猜你喜欢
    • 2013-03-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 2019-03-19
    • 1970-01-01
    • 1970-01-01
    • 2015-08-15
    • 1970-01-01
    相关资源
    最近更新 更多