【发布时间】:2019-03-24 19:20:44
【问题描述】:
如何实现java线程安全的唯一数字生成器? 这是我的版本
public class Generator {
List<Integer> list = new ArrayList<>();
public Generator() {
for (int i = 0; i < 1000; i++) {
list.add(i);
}
}
public Integer generate() {
Collections.shuffle(list);
return list.get(0);
}
}
但是理论上,洗牌的时候可以得到一个唯一的号码。如何实现独特性?洗牌时是否需要在我的收藏中同步,即
synchronized (list) {
Collections.shuffle(list);
}
谢谢。
【问题讨论】:
-
嗯,这不是唯一的。
get(0)可能返回相同的数字。
标签: java multithreading thread-safety