SecureRandom
线程安全吗?也就是说,在初始化之后,是否可以依赖对下一个随机数的访问来保证线程安全?检查源代码似乎表明它是安全的,而this bug report似乎表明它缺乏作为线程安全的文档是一个javadoc问题。有没有人确认它实际上是线程安全的?
发布于 2010-04-28 12:47:03
SecureRandom
的当前实现是线程安全的,特别是两个变异方法nextBytes(bytes[])
和setSeed(byte[])
是同步的。
据我所知,所有变异方法最终都是通过这两个方法路由的,SecureRandom
覆盖了Random
中的一些方法以确保这一点。它可以工作,但如果将来实现发生变化,它可能会变得脆弱。
最好的解决方案是先在SecureRandom
实例上手动同步。这意味着每个调用堆栈将在同一对象上获得两个锁,但这在现代JVM上通常非常便宜。也就是说,显式同步并没有太大的危害。例如:
SecureRandom rnd = ...;
byte[] b = new byte[NRANDOM_BYTES];
synchronized (rnd) {
rnd.nextBytes(b);
}
https://stackoverflow.com/questions/1461568
复制相似问题