【问题标题】:The use of System.currentTimeMillis() in loops in Java [closed]在 Java 的循环中使用 System.currentTimeMillis() [关闭]
【发布时间】:2012-01-14 07:23:22
【问题描述】:

让我们观察以下 Java 代码段,它在 for 循环中使用了 System.currentTimeMillis()

package loops;

final public class Main
{
    public static void main(String... args)
    {
        final long MAX_VAL=Long.MAX_VALUE;
        final long CURRENT_MILLIS=System.currentTimeMillis(); 

        System.out.println("MAX_VAL = "+MAX_VAL);
        System.out.println("CURRENT_MILLIS = "+CURRENT_MILLIS);

        for(long time = 0; time < CURRENT_MILLIS; time++)
        {
            System.out.println("inside for = "+time);
        }
    }
}

在上面的代码中,final long 类型变量CURRENT_MILLIS 保存了系统维护的当前毫秒数,它始终小于(MAX_VAL) 通过for 循环在Java 中long 数据类型的大小陷入无限循环。怎么样?

【问题讨论】:

  • 这不是一个无限循环,而是一个有数十亿次迭代的循环。只是需要很长时间才能完成。这个问题的意义何在?
  • 这个问题没有意义,只是好奇。

标签: java halting-problem


【解决方案1】:

如果您担心时间之间的比较,可以使用

while (System.currentTimeMillis() - start < RUN_TIME)

这可能是 nanoTime 的问题,因为它可能会在 292 年后溢出。但是,使用 currentTimeMillis,您大约有 2.92 亿年。

【讨论】:

    【解决方案2】:

    请在睡前运行上面的程序,早上醒来看看输出..你会得到答案的......

    【讨论】:

    • 由于for循环将有数十亿次迭代,运行程序需要时间...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-10
    • 2017-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-07
    相关资源
    最近更新 更多