java随机产生long_java生成随机数

随机数的生成在一些代码中很常用,更是涉及到了很多行业,比如游戏,彩票等等很多金融相关的行业。Java生成随机数在java开发中也是一个合格的程序员必备的功能实现。

就目前来说,java生成随机数的方法主要有下面几种:

一、new Random()需要借助java.util.Random类来产生一个随机数发生器,java.util.Random 这个类提供了生成Bytes、Int、Long、Float、Double、Boolean的随机数的。这种方法也是最常用的一种,构造函数有两个,Random()和Random(long seed)。第一个就是以当前时间为默认种子,第二个是以指定的种子值进行。产生之后,借助不同的语句产生不同类型的数。

种子就是产生随机数的第一次使用值,机制是通过一个函数,将这个种子的值转化为随机数空间中的某一个点上,并且产生的随机数均匀的散布在空间中。以后产生的随机数都与前一个随机数有关。以代码为例:

public static void main(String[] args)

{

Random r = new Random(1);

for(int i=0 ; i<5 ; i++)

{

int ran1 = r.nextInt(100);

System.out.println(ran1);

}

}

编译器下产生的五个数均为66,12,47,13,86,如果采用Random r = new Random(),产生的随机数就不同,这就是确定种子导致的结果。

二、Math.random()则是借助java.util.Math.random类方法提供了生成Double随机数的方法,这个方法的内部实现也是调用了java.util.Random的nextDouble方法,只不过它对多线程进行了更好的支持,在多个线程并发时会减少每个随机数生成器的竞争。这种方法返回的数值是[0.0,1.0)的double型数值,由于double类数的精度很高,可以在一定程度下看做随机数,借助(int)来进行类型转换就可以得到整数随机数了,代码如下。

public static void main(String[] args)

{

int max=100,min=1;

int ran2 = (int) (Math.random()*(max-min)+min);

System.out.println(ran2);

}

三、第三方工具类,如Apache Common Lang库与Apache Common Math库中提供的随机数生成类,真正使用一行代码来实现复杂的随机数生成。

public void testRandom_generatingFloatBounded_withApacheLang() throws Exception {

float min = 1f;

float max = 10f;

float generatedFloat = RandomUtils.nextFloat(min, max);

System.out.println(generatedFloat);

}

四、java.util.concurrent.ThreadLocalRandom 专为多线程并发使用的随机数生成器,使用的方法为ThreadLocalRandom.current.nextInt(),此类是在JDK1.7中提供的,并且特别适合ForkJoinTask框架,而且在这个类中直接提供了生成有边界的随机数的操作,如public int nextInt(int origin, int bound),这样也可以一行代码来实现复杂的随机数生成了。

public void testRandom_generatingLongBounded_withThreadLocalRandom() throws Exception {

long min = 1;

long max = 10;

long threadLongBound = ThreadLocalRandom.current().nextLong(min, max);

System.out.println(threadLongBound);

}

综上所述,我们发现在java中生成随机数时,在单线程中使用java.util.Random类,在多线程中使用java.util.concurrent.ThreadLocalRandom类。

随机数的生成其实本身就是一个很有意思的功能的实现,似乎冥冥之中天注定,但又是根据你所敲击的代码来实现的。其实代码也并没有我们想象的那么枯燥,反而有许多有意思的代码。做一个程序员也有很多开心的地方,子非鱼,安知鱼之乐?乐在其中,才是最重要的。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值