java并发编程第六章(7)生成并发编程随机数

6.生成并发随机数
java并发API提供了一个特殊类用以在并发程序中生成伪随机数。在java 7中新引入的ThreadLocalRandom类。是线程本地变量。
每个生成随机数的线程都有一个不同的生成器,
但是都在同一个类中被管理,对程序员来说是透明的。

相比于使用共享的Random对象为所有线程生成随机数,这种机制具有更好的性能。
该方法是一个静态方法,返回与当前线程相关关联的TaskLocalRandom对象,
所以可以使用这个对象生成随机数,如果调用该方法的线程还没有关联随机数对象,就会生成一个新的。
ThreadLocalRandom类提供了方法来生成long,float,double数字和Boolean值,
还可为方法指定一个数字作为输入参数,来生成介于0与该数字之间的随机数,还可以为方法指定两个
数字作为传入参数,来生成介于两个参数之间的随机数。
实例代码:

/**
 * 
 * @author fcs
 * @date 2015-6-22
 * 描述:生成并发随机数
 * 
 * 说明:java 7 新引入的ThreadLocalRandom类,是线程本地变量。
 * 每个生成随机数的线程都有一个不同的生成器,但是都在同一个类中被管理,对程序员来讲是透明的。
 * 相比于使用共享的Random对象为所有线程生成随机数,这种机制具有更好的性能。
 */
public class TaskLocalRandom implements Runnable{

    //实现类构造器,使用current()方法为当前线程初始化随机数生成器
    public TaskLocalRandom(){
        //该方法是一个静态方法,返回与当前线程相关关联的TaskLocalRandom对象,
        //所以可以使用这个对象生成随机数,如果调用该方法的线程还没有关联随机数对象,就会生成一个新的。
        ThreadLocalRandom.current();
    }
    /**
     * 在该方法中调用current()获取本地线程关联的随机数生成器,同时也调用了NextInt()方法并以数字10作为参数传入。、
     * 
     */
    @Override
    public void run() {
        String name = Thread.currentThread().getName();
        for(int i = 0;i < 10000;i++){
            try {
                TimeUnit.MILLISECONDS.sleep(1);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            System.out.printf("%s: %d\n",name,ThreadLocalRandom.current().nextInt(100));
        }
    }

}

public class Main {
    public static void main(String[] args) {
        Thread [] threads = new Thread [1000];
        for(int  i =0;i< threads.length;i++){
            TaskLocalRandom  random = new TaskLocalRandom();
            threads[i] = new Thread(random);
            threads[i].start();
        }
    }
}

运行截图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值