繁体   English   中英

java.util.UUID 线程安全吗?

[英]is java.util.UUID thread safe?

我问这个问题是因为以下观察

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

    "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)
  2. 找到这个链接

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

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

UUID 是不可变的,因此它可能是线程安全的,但显然在某些访问器中存在一些邪恶的缓存,使其不安全(该错误现已修复)。

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

Uuid是线程安全的,但是有另一个名为JUG的库,它在性能上更有效。

资料来源: http//www.dcalabresi.com/blog/java/generate-java-uuid-performance/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM