21

嘿,所以我有 3 个线程,它们在打印出某些东西时具有一定的条件。这很好用。我现在想要做的是在线程输出一些东西之前让它进入睡眠状态随机数量的毫秒。我正在考虑使用数学课,但不知道如何。

random() 应该生成大于或等于 0.0 且小于 1.0 的随机双精度数,对吗?

我会写一些类似的东西吗

Thread.sleep(random());

^ 试过了还是不行

4

3 回答 3

35

Thread.sleep()取值longnot double。您需要在这里进行类型转换:-

Thread.sleep((long)(Math.random() * 1000));
于 2012-11-28T20:10:06.707 回答
14

Thread.sleep()接受一个long值,即休眠的毫秒数。在 0 和 1 之间传递一个浮点值是行不通的,因为该值总是会被​​截断为零。

要解决此问题,请从适当的范围内生成一个随机整数,并将其传递给Thread.sleep().

例如,要休眠一秒钟,请使用Thread.sleep(random.nextInt(1000));. 这里,random是一个类型的对象Random

于 2012-11-28T20:10:10.763 回答
7

您的代码有两个问题:

  1. 最短的时间sleep()是 1 毫秒

  2. 类型不正确:doublelong.

这将起作用:

Thread.sleep((long)(Math.random() * 1000));

它将休眠 0 到 1000 毫秒之间的时间。

于 2012-11-28T20:10:30.420 回答