生成并发随机数

Java 9并发编程指南 目录

ThreadLocalRandom类在Java版本7中引入,是Java并发API提供的特定类,在并发应用中生成伪随机数。此类作为线程的局部变量使用,每个要生成随机数的线程都有不同的生成器,但是它们都是通过此类以透明的方式管理给程序员。使用这种机制,性能要比使用共享Random对象生成所有线程的随机数更好。

本节将学习如何使用ThreadLocalRandom类在并发应用中生成随机数。

准备工作

本范例通过Eclipse开发工具实现。如果使用诸如NetBeans的开发工具,打开并创建一个新的Java项目。

实现过程

通过如下步骤实现范例:

  1. 创建名为TaskLocalRandom的类,指定其实现Runnable接口:

    public class TaskLocalRandom  implements Runnable {
    
  2. 实现run()方法,得到正在执行任务的线程名称,使用nextInt()方法输出10个随机整数到控制台:

    	@Override
    	public void run() {
    		String name=Thread.currentThread().getName();
    		for (int i=0; i<10; i++){
    			System.out.printf("%s: %d\n",name, ThreadLocalRandom.current().nextInt(10));
    		}		
    	}
    }
    
  3. 实现本范例主类,创建名为Main的类,包含main()方法:

    public class Main {
    	public static void main(String[] args) {
    
  4. 创建三个Thread对象的数组:

    		Thread threads[]=new Thread[3];
    
  5. 创建加载三个TaskLocalRandom任务,将线程存储到之前创建的数组中:

    		for (int i=0; i<3; i++) {
    			TaskLocalRandom task=new TaskLocalRandom();
    			threads[i]=new Thread(task);
    			threads[i].start();
    		}
    	}
    }
    

工作原理

本范例的关键是在TaskLocalRandom类中。此类构造函数中,调用了TaskLocalRandom类的current()方法。这是一个静态方法,返回与当前线程关联的ThreadLocalRandom对象,因此可以使用此对象生成随机数。如果调用此方法的线程没有任何关联对象,此类将创建一个新的对象。在本例中,使用此方法初始化与此任务相关联的随机生成器,因此它将在下一次调用此方法中创建。

在TaskLocalRandom类的run()方法中,调用current()方法得到与线程相关联的随机生成器,还要调用传参值为10的nextInt()方法。此方法返回0到10之间的伪随机数,每个任务生成10个随机数。

扩展学习

ThreadLocalRandom类还提供生成长整型、浮点型和双精度数字,以及布尔值。一些方法需要提供一个数字作为参数,以生成0到此数字之间的随机数。其他方法需要提供两个参数,以便在这两个数字之间生成随机数。

更多关注

  • 第一章“线程管理”中的“使用线程局部变量”小节
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值