2011-08-27 28 views
23

Tôi hỏi câu hỏi này bởi vì các quan sát saulà chuỗi java.util.UUID có an toàn không?

  1. nhận stack trace này trong chủ đề bãi trong môi trường ren cao đa

    "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. tìm thấy liên kết này

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

nếu UUID không phải là chủ đề an toàn, vui lòng đề xuất bất kỳ thư viện nào khác nếu nó tồn tại.

+2

Thực tế là một chủ đề là trong 'bang BLOCKED' không, tự nó, không có nghĩa là có một vấn đề. Điều này là bình thường nếu một chuỗi đang chờ để có được một khóa cho một phương pháp đồng bộ hoặc khối mã. Chỉ khi luồng nằm trong trạng thái này mãi mãi có thể có nghĩa là có bế tắc. – Jesper

+0

+ 1 cho liên kết (báo cáo lỗi của Josh Bloch ...) - và bằng cách liên kết trong báo cáo lỗi (http://cr.openjdk.java.net/~mduigou/6611830/webrev.0/webrev /) các lỗi nên được cố định bởi bây giờ –

Trả lời

10

UUID là không thay đổi vì vậy nó có khả năng an toàn, nhưng dường như có một số evil caching going on trong một số người truy cập đã làm cho nó không an toàn (lỗi đó đã được sửa).

Nhưng chuỗi chỉ của bạn chỉ nói rằng một chuỗi đang chờ khóa tại SecureRandom.nextBytes, được sử dụng bởi nhà máy UUID.randomUUID, chắc chắn an toàn chỉ. Đó là những gì phải xảy ra khi một số chủ đề gọi nó cùng một lúc, theo như tôi có thể nói.

+0

Việc sử dụng SecureRandom sẽ làm cho phương pháp này rất chậm trong một số trường hợp. Bạn nên sử dụng nguồn bit này nếu bạn thực sự muốn các bit tốt nhất, nhưng nếu bạn muốn nhiều UUID (cho một mô phỏng có lẽ), thì điều này có thể rất chậm. –

+0

Vì lỗi đã được sửa chữa nhiều năm trước, câu trả lời này có nên nói rằng bây giờ là chuỗi an toàn không? – eis

-1

Đó là an toàn chủ đề --- đó là lý do tôi dành hàng tuần để xác định vị trí nút cổ chai do lớp học ác này gây ra trong một chương trình đồng thời.

+0

bất kỳ cách giải quyết nào bạn có thể đưa ra xung quanh nút cổ chai này? – Ashish

+7

Vì vậy, bạn đang nói là IS hoặc KHÔNG an toàn chỉ. Sarcasm không thực sự hữu ích ở đây. – jtbradle

+1

Hãy trả lời rõ ràng về việc bạn có thực sự thấy nó an toàn hay không. Từ câu trả lời thiêng liêng của bạn, người đọc câu trả lời của bạn không được đảm bảo về bất cứ điều gì. –

Các vấn đề liên quan