关于ThreadLocal使用场景一
来源:4-1 ThreadLocal用途

woy
2020-02-12
老师, 我想问下, ThreadLocal使用场景一中提到: SimpleDateFormat, Random等在多线程访问时是不安全的, 有点不理解.
我理解的是Random中方法是生成随机数, 那多个线程调用, 怎么会不安全呢, 不是一个线程拿到一个随机数么, 不同线程也没啥影响啊.
写回答
1回答
-
恩,如果从随机的角度考虑,那么确实一个线程拿到一个随机数,不同线程也没啥影响的。
另外,在random这里使用ThreadLocal,主要是为了解决效率问题,如果多个线程需要等待一个共享的随机数生成器java..util.Random 类, 这会很低效。
可以使用ThreadLocal 辅助类为各个线程提供一个单独的生成器, 不过Java SE 7 还另外提供了一个便利类。只需要做以下调用:
int random = ThreadLocalRandom.curren().nextInt(upperBound) :
ThreadLocalRandom.current() 调用会返回特定于当前线程的Random 类实例。
可以参考:https://stackoverflow.com/questions/5819638/is-random-class-thread-safe
012020-02-12
相似问题