Java - 程序卡在 TreeSet.add()

Java - Program got stucked in TreeSet.add()

我有多个线程想要在 TreeSet<Long> 的一部分代码中放置一个值。这些值几乎是唯一的,因为它们是 System.nanoTime()。我定期清理 TreeSets。问题是有时我的线程在 TreeSet.add() 函数中被阻塞。我使用 jconsole 来观察线程状态,线程处于 RUNNABLE 状态并且堆栈跟踪显示:

java.util.TreeMap.put(TeeMap.java:567)
java.util.TreeSet.add(TreeSet.java:255)
... //my program stack trace

我正在为 运行 程序使用 jdk 1.7.0_60。另外我应该提到在这种情况下 cpu 使用率变为 100%。我的问题是为什么线程被阻塞,我该如何解决这个问题?我查看了 TreeMap 代码,但没有发现问题,但我认为问题与 TreeMap.put().

中的 while 循环有关

正如评论中提到的,问题是TreeSet不是线程安全的,如果我们想在多线程中修改它(添加或删除数据),它必须在外部同步。