是java.util.UUID线程安全吗?

我提出这个问题,因为有以下观察

>在高度多线程环境中的线程转储中获取此堆栈跟踪

 

"http-80-200" daemon prio=10 tid=0x00002aaab4981000 nid=0x7520 waiting \
 for monitor entry [0x000000004fec7000]
   java.lang.Thread.State: BLOCKED (on object monitor)
    at java.security.SecureRandom.nextBytes(SecureRandom.java:433)
    - waiting to lock <0x00000000c00da220> (a java.security.SecureRandom)
    at java.util.UUID.randomUUID(UUID.java:162)

>找到这个链接

http://bugs.sun.com/view_bug.do?bug_id=6611830

如果UUID不是线程安全的,请建议任何其他库(如果存在)。

最佳答案
UUID是不可变的,所以它可能是线程安全的,但显然在一些访问器中有一些evil caching going on使它不安全(该错误现在修复)。

但是你的线程转储只是说一个线程正在等待SecureRandom.nextBytes的锁,这是UUID.randomUUID工厂使用的,这绝对是线程安全的。据我所知,几个线程同时调用它是应该发生的。

转载注明原文:是java.util.UUID线程安全吗? - 代码日志