A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© sun_jun 中级黑马   /  2014-2-21 00:43  /  2006 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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 运行的时间比较长!为什么运行的时间长呀?求解释!


评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

7 个回复

倒序浏览
这也算是线程问题吧,你的A循环和B循环是有严格的先后顺序的,A循环执行结束以后才会开始B循环。所以当B循环开始时A循环已经执行结束了。时间差当然不一样。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
....... 来自手机 中级黑马 2014-2-21 07:17:30
藤椅
时间不一样是正常的 因为CPU的执行权会被抢走的 不一定会一直执行下去。 被抢走时只有停在那里等着再一次的抢回来执行权

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
  1. public static void main(String[] args)
  2.     {
  3.             int[] arr = new int[1000];
  4.             long a, b,c;
  5.             int d = 0;
  6.             int e = 0;
  7.             a = System.currentTimeMillis();
  8.          for(int y=arr.length;y>0;y--)
  9.             {  
  10.                  System.out.println(arr.length + "***" + ++e);
  11.            System.out.print("B");
  12.               }
  13.          c = System.currentTimeMillis();
  14.          for(int x=0;x<arr.length;x++)
  15.          {  
  16.                 System.out.println(arr.length + "***" + ++d);
  17.              System.out.print("A");
  18.         }
  19.          b = System.currentTimeMillis();
  20.           System.out.println(c-a);
  21.         System.out.println(b-c);
  22.   }
复制代码

首先我们把两个循环,换一下位置看看输出结果是多少 。54
32很明显 , 也是上面高于下面 。
如果我们把数组扩大成 100000 后 的运行结果是  2592
2732
如果我们再加一个0 之后的运行结果 :27092
26938 可以看到 误差越来越小 。
产生这种情况的原因我想可能是CPU关于时间精度的问题, 其实CPU的时间精度没有我们想像中的那么大,就像你在运行浮点数运算时一样 , 也是有误差的 。  但误差不大,不影响整体的结果 。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
我来运行一下,看行不行!
回复 使用道具 举报
赞一个。。。。
回复 使用道具 举报
这个不靠谱,你把下面的for循环丢到上面去,结果会不一样
回复 使用道具 举报
不能说打印A的循环就比打印B的运行时间长,CPU在运行的时候,除了这个main线程还有一个gc负责垃圾回收的,很难确定,负责垃圾回收的线程是在这两个线程中的哪一个循环中的时间长。我个人认为这些都是随机的没必要深究吧!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马