关于ThreadLocal使用场景一

来源:4-1 ThreadLocal用途

woy

2020-02-12

老师, 我想问下, ThreadLocal使用场景一中提到: SimpleDateFormat, Random等在多线程访问时是不安全的, 有点不理解.
我理解的是Random中方法是生成随机数, 那多个线程调用, 怎么会不安全呢, 不是一个线程拿到一个随机数么, 不同线程也没啥影响啊.

写回答

1回答

悟空

2020-02-12

恩,如果从随机的角度考虑,那么确实一个线程拿到一个随机数,不同线程也没啥影响的。

另外,在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

0
1
woy
非常感谢!
2020-02-12
共1条回复

深度解密Java并发工具,精通JUC,成为并发多面手

JUC全方位讲解,构建并发工具类知识体系

1599 学习 · 573 问题

查看课程