jdk自带的Random生成随机数放在生产环境是不安全的,存在暴力破解的风险,并且虽然其实线程安全的,但可能发生线程竞争降低效率。
| 随机类 | 是否线程安全 | 特点 |
|---|---|---|
| Random | 是 | 如果两个(多个)不同的Random实例,使用相同的seed,按照相同的顺序调用相同方法,那么它们得到的数字序列也是相同的。这看起来不太随机。 这种设计策略,既有优点也有缺点,优点是“相同seed”生成的序列是一致的,使过 |
| ThreadLocalRandom | 是 | 如果多个线程初始ThreadLocalRandom的时间完全一致,在调用方法和过程相同的情况下,产生的随机序列也是相同的;在一定程度上“-Djava.util.secureRandom=true”可以规避此问题 |
| SecureRandom | 是 | 继承自Random,该类提供加密强随机数生成器(RNG),加密强随机数最低限度符合FIPS 140-2“加密模块的安全要求”。此外,SecureRandom必须产生非确定性输出。因此,传递给SecureRandom对象的任何种子材料必须是不可预测的,并且所有SecureRandom输出序列必须具有加密强度。 |
| SplittableRandom | 否 | 适用于Fork/join形式的跨线程操作中,具有相同seed的不同SplittableRandom实例或者同一个SplittableRandom,多次运行结果是一致的。这和Random是一致的 |
2011

被折叠的 条评论
为什么被折叠?



