Java 如何跨多个请求生成随机值
我想为许多Servlet请求生成一些随机数。 问题是,如果我在每个servlet中使用一个新的随机对象,那么总体概率将是不正确的Java 如何跨多个请求生成随机值,java,google-app-engine,Java,Google App Engine,我想为许多Servlet请求生成一些随机数。 问题是,如果我在每个servlet中使用一个新的随机对象,那么总体概率将是不正确的 例如,对于大约10000多个请求,我希望所有随机值都应在该范围内均匀分布。那么为什么不使用全局随机实例呢 或者您可以使用更快的ThreadLocalRandom。它是一种全局性的,因为您无法真正创建它的实例。您可以通过调用ThreadLocalRandom.current()来获取实例。在Java7中,它返回每个线程的实例。在Java8中,它被进一步优化,总是返回相同
例如,对于大约10000多个请求,我希望所有随机值都应在该范围内均匀分布。那么为什么不使用全局
随机
实例呢
或者您可以使用更快的
ThreadLocalRandom
。它是一种全局性的,因为您无法真正创建它的实例。您可以通过调用ThreadLocalRandom.current()
来获取实例。在Java7中,它返回每个线程的实例。在Java8中,它被进一步优化,总是返回相同的单例。使用random获得真正的随机序列有点复杂。随机是以2^48周期的LCG为基础的,您需要非常小心使用seed。有一种方法可以使用数据存储生成单个序列以保持当前值,但性能不是很好,因为每次生成新的随机数时都需要更新值。这意味着,在没有memcache的情况下,您也可以达到10-20个请求/秒,在memcache的情况下,可能达到100个请求/秒左右。切分不会很有帮助,因为您需要保持原子种子值
算法将如下所示: