Class ThreadLocalRandomSource


  • public final class ThreadLocalRandomSource
    extends Object
    This class provides a thread-local UniformRandomProvider.

    The UniformRandomProvider is created once-per-thread using the default construction method RandomSource.create().

    Example:

    
     import org.apache.commons.rng.simple.RandomSource;
     import org.apache.commons.rng.simple.ThreadLocalRandomSource;
     import org.apache.commons.rng.sampling.distribution.PoissonSampler;
    
     // Access a thread-safe random number generator
     UniformRandomProvider rng = ThreadLocalRandomSource.current(RandomSource.SPLIT_MIX_64);
    
     // One-time Poisson sample
     double mean = 12.3;
     int counts = PoissonSampler.of(rng, mean).sample();
     

    Note if the RandomSource requires additional arguments then it is not supported. The same can be achieved using:

    
     import org.apache.commons.rng.simple.RandomSource;
     import org.apache.commons.rng.sampling.distribution.PoissonSampler;
    
     // Provide a thread-safe random number generator with data arguments
     private static ThreadLocal<UniformRandomProvider> rng =
         new ThreadLocal<UniformRandomProvider>() {
             @Override
             protected UniformRandomProvider initialValue() {
                 return RandomSource.TWO_CMRES_SELECT.create(null, 3, 4);
             }
         };
    
     // One-time Poisson sample using a thread-safe random number generator
     double mean = 12.3;
     int counts = PoissonSampler.of(rng.get(), mean).sample();
     
    Since:
    1.3
    • Method Detail

      • current

        public static UniformRandomProvider current​(RandomSource source)
        Returns the current thread's copy of the given source. If there is no value for the current thread, it is first initialized to the value returned by RandomSource.create().

        Note if the source requires additional arguments then it is not supported.

        Parameters:
        source - the source
        Returns:
        the current thread's value of the source.
        Throws:
        IllegalArgumentException - if the source is null or the source requires arguments