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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郑传庆 中级黑马   /  2012-6-15 11:37  /  1842 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 郑传庆 于 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();
    }
}
大家如果还有什么好的建议,可以提出来交流一下

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
不是没有获取到时间,时间已经获取到了
currentTimeMillis()返回以毫秒为单位的当前时间
而执行两次获取时间之间的代码所用的时间不到一毫秒
所以两次获取的时间一样

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

还真是这么一回事,谢谢了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马