黑马程序员技术交流社区
标题:
for循环的时间问题?
[打印本页]
作者:
sun_jun
时间:
2014-2-21 00:43
标题:
for循环的时间问题?
class Demo
{
public static void main(String[] args)
{
int[] arr = new int[10000];
long a, b,c;
a = System.currentTimeMillis();
for(int x=0;x<arr.length;x++)
{
System.out.print("A");
}
b = System.currentTimeMillis();
for(int y=arr.length;y>0;y--)
{
System.out.print("B");
}
c = System.currentTimeMillis();
System.out.println(b-a);
System.out.println(c-b);
}
}
这两个for循环除了条件语句不一样外,其余的都差不多,但是最后输出地时间差不一样,前面的b-a大于后面的c-b。
那只有一个可能,就是x<arr.length 运行的时间比较长!为什么运行的时间长呀?求解释!
作者:
北冥有鱼
时间:
2014-2-21 01:08
这也算是线程问题吧,你的A循环和B循环是有严格的先后顺序的,A循环执行结束以后才会开始B循环。所以当B循环开始时A循环已经执行结束了。时间差当然不一样。
作者:
.......
时间:
2014-2-21 07:17
时间不一样是正常的 因为CPU的执行权会被抢走的 不一定会一直执行下去。 被抢走时只有停在那里等着再一次的抢回来执行权
作者:
___________゛M
时间:
2014-2-21 08:01
public static void main(String[] args)
{
int[] arr = new int[1000];
long a, b,c;
int d = 0;
int e = 0;
a = System.currentTimeMillis();
for(int y=arr.length;y>0;y--)
{
System.out.println(arr.length + "***" + ++e);
System.out.print("B");
}
c = System.currentTimeMillis();
for(int x=0;x<arr.length;x++)
{
System.out.println(arr.length + "***" + ++d);
System.out.print("A");
}
b = System.currentTimeMillis();
System.out.println(c-a);
System.out.println(b-c);
}
复制代码
首先我们把两个循环,换一下位置看看输出结果是多少 。54
32很明显 , 也是上面高于下面 。
如果我们把数组扩大成 100000 后 的运行结果是 2592
2732
如果我们再加一个0 之后的运行结果 :27092
26938 可以看到 误差越来越小 。
产生这种情况的原因我想可能是CPU关于时间精度的问题, 其实CPU的时间精度没有我们想像中的那么大,就像你在运行浮点数运算时一样 , 也是有误差的 。 但误差不大,不影响整体的结果 。
作者:
peterbu
时间:
2014-6-11 02:50
我来运行一下,看行不行!
作者:
泛小型
时间:
2014-6-12 19:39
赞一个。。。。
作者:
四顾行者
时间:
2014-6-15 17:55
这个不靠谱,你把下面的for循环丢到上面去,结果会不一样
作者:
郝九凤
时间:
2014-6-18 09:48
不能说打印A的循环就比打印B的运行时间长,CPU在运行的时候,除了这个main线程还有一个gc负责垃圾回收的,很难确定,负责垃圾回收的线程是在这两个线程中的哪一个循环中的时间长。我个人认为这些都是随机的没必要深究吧!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2