簡體   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