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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张开开 黑马帝   /  2012-2-18 13:06  /  3827 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在调用Thread.sleep()方法时,有时需要设置一个随即的睡眠时间,我看Java课本上的随机睡眠时间是用(long)(Math.random()*1000))来表示的,为什么要乘以1000呢,随机的时间有一个特定的范围吗??求解!

4 个回复

倒序浏览
因为Thread.sleep()方法里面的时间是以毫秒为单位的,Math.random()可以产生一个0~9的随机数,比如产生的数是6,如果不乘以1000的话,就表示这个线程休眠千分之六秒,你能察觉到吗,你没观察到结果,结果线程的休眠时间已经到了。
在这里乘以1000,是表示让这个线程休眠几秒钟(乘以1000,就表示秒,1秒==1000毫秒)。

评分

参与人数 1技术分 +1 收起 理由
唐秀启 + 1

查看全部评分

回复 使用道具 举报
计算单位问题,thread.sleep()里的单位是毫秒,乘以1000就变成秒了,便于我们日常生活的感觉。因为我们平时常用的单位就是秒,很少用毫秒。之所以乘以1000,是表示让这个线程休眠几秒钟(乘以1000,就表示秒,1秒==1000毫秒)。
thread.sleep():1.可以调用Thread类的静态方法:  public static void sleep (long millis) thorows InterruptedException
  使得当前线程休眠(暂时停止执行millis毫秒)

2.由于是静态方法,sleep可以由类名.直接调用:Thread.sleep(…)

class MyThread extends Thread {
boolean flag = true;
  public void run(){
    while(flag){
      System.out.println("==="+new Date()+"===");
      try {
        sleep(1000);                            //直接调用
      } catch (InterruptedException e) {
        return;
      }
    }
  }
}
/*
public void run() {
    while (true) {
      String temp = new Date().toString();
      String t = temp.substring(11, temp.indexOf('C'));
      t = t.trim();
      String[] time = t.split(":");
      if (time.length == 3) {
        System.out.println(“现在是” + time[0] + “点” +
                  time[1] + "分" + time[2] + "秒");
      }
      try {
        Thread.sleep(5000);                 //由类名调用
      } catch (InterruptedException e) {
        return;
      }  
    }
  }
}
*/

一个直接调用,一个Thread.sleep 由类名调用。

评分

参与人数 1技术分 +1 收起 理由
唐秀启 + 1

查看全部评分

回复 使用道具 举报
Thread.sleep()方法里面的时间是以毫秒为单位的,1秒等于1000毫秒,而Math.random()可以产生一个0~9的随机数,乘以1000是为了让延长线程的休眠时间,以便我们能够感觉得到。不然时间太短你会感觉这句话没有效果。
回复 使用道具 举报
表示时间在1000秒内产生
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马