我提出这个问题是基于以下观察。
在高度多线程环境中的线程转储中获取此堆栈跟踪 “http-80-200”守护程序优先级=10 tid=0x00002aaab4981000 nid=0x7520等待获取监视器入口[0x000000004fec7000] java.lang.Thread.State: BLOCKED(在对象监视器上) 在java.security.SecureRandom.nextBytes(SecureRandom.java:433)处 - 等待锁<0x00000000c00da220>(一个java.security.SecureRandom) 在java.util.UUID.randomUUID(UUID.java:162)处
找到此链接 https://bugs.java.com/bugdatabase/view_bug?bug_id=6611830 如果UUID不是线程安全的,请提供其他库(如果存在的话)的建议。
在高度多线程环境中的线程转储中获取此堆栈跟踪 “http-80-200”守护程序优先级=10 tid=0x00002aaab4981000 nid=0x7520等待获取监视器入口[0x000000004fec7000] java.lang.Thread.State: BLOCKED(在对象监视器上) 在java.security.SecureRandom.nextBytes(SecureRandom.java:433)处 - 等待锁<0x00000000c00da220>(一个java.security.SecureRandom) 在java.util.UUID.randomUUID(UUID.java:162)处
找到此链接 https://bugs.java.com/bugdatabase/view_bug?bug_id=6611830 如果UUID不是线程安全的,请提供其他库(如果存在的话)的建议。
BLOCKED
状态本身并不意味着存在问题。如果线程正在等待获取同步方法或代码块的锁定,则这是正常的。只有当线程永远停留在此状态时才可能表示存在死锁问题。 - Jesper