黑马程序员技术交流社区

标题: 定时器打印时间的问题【已解决】 [打印本页]

作者: 郑传庆    时间: 2012-6-15 11:37
标题: 定时器打印时间的问题【已解决】
本帖最后由 郑传庆 于 2012-6-15 13:06 编辑

下面一个简单的定时器,我想看一下每运行一次要的时间是否是1秒,可我在nunnable2 里面打印为什么获取不到当前的时间呢?大家帮忙看下

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class Road {
       private static List<String> lst = new ArrayList<String>();;

       private static String name =null;
       @SuppressWarnings("static-access")
       public Road(String name){
              this.name = name;
              ScheduledExecutorService  scheduled =  Executors.newScheduledThreadPool(1);
              scheduled.scheduleAtFixedRate(
                               nunnable2,
                              1,//过多少秒运行
                              1,//过多少秒接着继续
                              TimeUnit.SECONDS);//秒
  
       }
      static Runnable nunnable1 = new Runnable() {
            public void run(){
                    for(int i=1;i<5;i++){
                          try {
                                 Thread.sleep((new Random().nextInt(10) + 1) * 1000);
                         } catch (InterruptedException e) {
                                e.printStackTrace();
                         }
                                lst.add(name + "_" + i);
                  }
                 return;
         }
  
      };
      Runnable nunnable2 = new Runnable() {
           @Override
           public void run() {
                if(lst.size()>0){
                      boolean lighted = true;
                      if(lighted){//为什么我这里获取不到时间?
                             long st = System.currentTimeMillis();
                             String num = lst.remove(0);
                             System.out.println(num + " ,您好");
                             long et = System.currentTimeMillis();
                             long time =  (et-st);
                             System.out.println(num+"时间是:"+ time +"\n");
                      }
                 }
            }
     };
    public static void main(String args[]){
         Road road = new Road("集合");
         new Thread(nunnable1).start();
    }
}
大家如果还有什么好的建议,可以提出来交流一下

作者: 刘春发    时间: 2012-6-15 12:30
不是没有获取到时间,时间已经获取到了
currentTimeMillis()返回以毫秒为单位的当前时间
而执行两次获取时间之间的代码所用的时间不到一毫秒
所以两次获取的时间一样

可以在两次获取时间之间加些需要时间执行的代码可以测试到,例如
for(int i=0;i<10000;i++)
      System.out.println(i);
作者: 郑传庆    时间: 2012-6-15 13:06
刘春发 发表于 2012-6-15 12:30
不是没有获取到时间,时间已经获取到了
currentTimeMillis()返回以毫秒为单位的当前时间
而执行两次获取时 ...

还真是这么一回事,谢谢了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2