私は次の観察のためにこの質問をしています
高度にマルチスレッド化された環境のスレッドダンプでこのスタックトレースを取得する
"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)
このリンクを見つけました
uUIDがスレッドセーフでない場合は、他のライブラリが存在する場合はそれを提案してください。
UUIDは不変であるため、スレッドセーフである可能性がありますが、一部のアクセサーでいくつかの 悪のキャッシュが進行中 であり、安全ではありませんでした(このバグは現在修正されています)。
しかし、スレッドダンプは、スレッドがSecureRandom.nextBytes
でロックを待機していることを示しています。これは、UUID.randomUUID
ファクトリによって使用されます。これは間違いなくisスレッドセーフ。私の知る限り、複数のスレッドが同時にそれを呼び出すと、それが起こるはずです。
Uuidはスレッドセーフですが、 [〜#〜] jug [〜#〜] という別のライブラリがあり、パフォーマンスがより効率的です。
ソース: http://www.dcalabresi.com/blog/Java/generate-Java-uuid-performance/