code: public static synchronized Random getThreadLocalRandom() {
          if(threadLocalRandom == null) {
              threadLocalRandom = new ThreadLocal<Random>() {
                  /**
                   * Builds a Random object using the globalSeed (if available).
                   * 
                   * @return 
                   */
                  @Override
                  protected Random initialValue() {
                      if(globalSeed == null) {
                          return new Random();
                      }
                      else {
                          return new Random(globalSeed);
                      }
                  }
              };
          }
          return threadLocalRandom.get();
      }
docs: Returns a Random object which is stored as ThreadLocal variable and as
  a result each Thread has an independent copy of this variable. When the
  Random objects are initialized, they seeded with the global seed (if not
  null).
  
  @return