您的位置:首页 > 编程语言 > Java开发

发送邮件 java实现

2010-04-04 17:40 274 查看
Java Random类可以获取随机数,请看如下代码:
public class RandomTest {

public static void main(String[] args) {
RandomTest.getRandom();
System.out.println("---------------------------");
RandomTest.notGetRandom();
}

/**
* 执行n次返回数据不同
*/
public static void getRandom(){
Random r = new Random();
for(int i=1;i<4;i++){
System.out.println("第"+i+"次结果为:"+r.nextInt());
}
}

/**
* 相同的机器执行多次返回的内容是一致的
*/
public static void notGetRandom(){
Random r = new Random(1000);
for(int i=1;i<4;i++){
System.out.println("第"+i+"次结果为:"+r.nextInt());
}
}
}

执行多次结果如下:
执行第一次输出结果为:
第1次结果为:-255222630
第2次结果为:1123609859
第3次结果为:-1656551992
---------------------------
第1次结果为:-1244746321
第2次结果为:1060493871
第3次结果为:-1826063944

执行第二次输出结果为:
第1次结果为:-552545679
第2次结果为:1866864931
第3次结果为:-1883987848
---------------------------
第1次结果为:-1244746321
第2次结果为:1060493871
第3次结果为:-1826063944

发现方法notGetRandom在相同的机器上执行n次返回的结果都是一样的。

具体原因如下:
random 源码中定义如下:
public Random() { this(++seedUniquifier + System.nanoTime()); }
private static volatile long seedUniquifier = 8682522807148012L;
每次构造一个Random对象时是以当前时间纳秒数加参数获得。

public Random(long seed) {
this.seed = new AtomicLong(0L);
setSeed(seed);
}
而Random(long seed)构造方法是以固定的种子seed获得。所以出现前面demo的情况就不言而明了。
Java中Random遵循2个规则
1、种子不同产生不同的随机数
2、种子相同即使实例不同也产生相同的随机数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: