10

我相信我可能在 Oracle Java7 Update 5 中发现了一个 UUID 多线程错误,我想知道是否有人可以用一个独立的例子来确认。基本上会发生什么,如果我同时调用 UUID.Random()(我使用 64 个线程),我大部分时间都会很快发生冲突)。

但是,如果 UUID 生成器通过预先运行一个测试来预热,该测试只是抛出一堆 UUID,它似乎工作正常。这是scala的要点:

https://gist.github.com/3318973

需要注意的是,我正在插入一个可变集合,我正在从 64 个不同的线程同步该集合。主线程阻塞等待工作人员完成,然后检查设置的大小是否应该是它应该是的。碰撞在发生时打印。

谢谢!亚当

4

2 回答 2

7

可能是这样的:

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

它已在 7u6 中修复,应该很快就会出来。

于 2012-08-11T02:47:52.703 回答
2

我对 Java 1.7.0_05 进行了快速检查(不涉及 scala 或 scalatest)并且无法重现任何 UUID 冲突。我的基本设置是相同的,128 个线程在一个同步的集合中每个都抛出 10000 个 uid。这很可能是您的测试代码的问题,我无法在这台机器 atm 上仔细检查。

于 2012-08-11T00:21:12.347 回答