今天在联系一下前面学习的知识,实现一个简单的需求。
需求
多个线程并发获取随机数,要求随机数据不能重复。
非多线程下的随机数获取
实现获取随机数的方式两种:
– Math.random()
– new Random.nextInt(int)
因为一般获取随机数都要求是整数,所以第一种获取方式一般需要乘以10的n次方,所以这次练习采用第二种方式。
测试代码:
public static void main (String[] args) {
Random random = new Random();
for (int i = 0; i < 10; i++) {
System.out.println(random.nextInt(10));
}
}
执行结果:
4
3
5
2
3
8
3
2
0
9
在限制了随机数范围的情况下(< 10),获取10次,多次出现重复数据。
为了解决这个问题,我要引入一个变量用来存储已出现的随机数,判断随机数是否已经出现,出现就重新生成。
修改代码:
static Map<String, String> map = new HashMap<>();
public static void main (String[] args) {
Random random = new Random();
int num;
for (int i = 0; i < 10; i++) {
num = random.nextInt(10);
num = createUnRepetNum(num, random);
System.out.println(num);
}
}
private static int createUnRepetNum(int num, Random random) {
String value = map.get(String.valueOf("key" + num));
if (null !=