黑马程序员技术交流社区

标题: 关于随机睡眠时间的问题 [打印本页]

作者: 张开开    时间: 2012-2-18 13:06
标题: 关于随机睡眠时间的问题
在调用Thread.sleep()方法时,有时需要设置一个随即的睡眠时间,我看Java课本上的随机睡眠时间是用(long)(Math.random()*1000))来表示的,为什么要乘以1000呢,随机的时间有一个特定的范围吗??求解!
作者: 邱纲    时间: 2012-2-18 13:39
因为Thread.sleep()方法里面的时间是以毫秒为单位的,Math.random()可以产生一个0~9的随机数,比如产生的数是6,如果不乘以1000的话,就表示这个线程休眠千分之六秒,你能察觉到吗,你没观察到结果,结果线程的休眠时间已经到了。
在这里乘以1000,是表示让这个线程休眠几秒钟(乘以1000,就表示秒,1秒==1000毫秒)。
作者: 吴文华    时间: 2012-2-18 13:57
计算单位问题,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 由类名调用。


作者: 何招俊    时间: 2012-2-18 15:40
Thread.sleep()方法里面的时间是以毫秒为单位的,1秒等于1000毫秒,而Math.random()可以产生一个0~9的随机数,乘以1000是为了让延长线程的休眠时间,以便我们能够感觉得到。不然时间太短你会感觉这句话没有效果。
作者: 花开~的季节    时间: 2012-2-18 20:32
表示时间在1000秒内产生




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