use ThreadLocalRandom.current() instead of creating new Random instances