快速业务通道

Java的UUID生成工具并发测试 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23

Java的UUID生成工具并发测试

时间:2010-11-03 51cto博客 leizhimin

一、认识UUID

UUID

维基百科,自由的百科全书

通用唯一识别码 (Universally Unique Identifier, UUID) 是一个软件建构的标准,亦为自由软件基金会 (Open Software Foundation, OSF) 的组织在分布式计算环境 (Distributed Computing Environment, DCE) 领域的一部份。

UUID 的目的,是让分布式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。如此一来,每个人都可以建立不与其它人冲突的 UUID。在这样的情况下,就不需考虑数据库建立时的名称重复问题。目前最广泛应用的 UUID,即是微软的 Microsoft''s Globally Unique Identifiers (GUIDs),而其他重要的应用,则有 Linux ext2/ext3 文件系统、LUKS 加密分区区、GNOME、KDE、Mac OS X 等等。另外我们也可以在 e2fsprogs 包中的 UUID 库找到实现。

[编辑] 定义

一组 UUID,系由一串 16 字节(亦称 16 字节,或 128 位)的16进位数字所构成,是故UUID理论上的总数为216 x 8=2128,约等于3.4 x 1038。也就是说若每奈秒产生1兆个UUID,要花100亿年才会将所有UUID用完。

UUID的标准类型包含32个16进位数字,以连字号分为五段,形式为8-4-4-4-12的32个字符。示例;

550e8400-e29b-41d4-a716-446655440000

UUID 亦可刻意重复以表示同类。例如说微软的COM中,所有组件皆必须实现出IUnknown接口,方法是产生一个代表IUnknown的UUID。无论是程序试图访问组件中的IUnknown接口,或是实现IUnknown接口的组件,只要IUnknown一被使用,皆会被参考至同一个 ID:00000000-0000-0000-C000-000000000046。

[编辑] 随机UUID的重复机率

随机产生的UUID(例如说由java.util.UUID类产生的)的128个位中,有122个位是随机产生,4个位在此版本(''Randomly generated UUID'')被使用,还有2个在其变体(''Leach-Salz'')中被使用。利用生日悖论,可计算出两笔UUID拥有相同值的机率约为

以下是以x=2122计算出n笔UUID后产生碰撞的机率:

n 机率 68,719,476,736 = 236 0.0000000000000004 (4 x 10-16) 2,199,023,255,552 = 241 0.0000000000004 (4 x 10-13) 70,368,744,177,664 = 246 0.0000000004 (4 x 10-10)

与被陨石击中的机率比较的话,已知一个人每年被陨石击中的机率估计为170亿分之1[1],也就是说机率大约是0.00000000006 (6 x 10-11),等同于在一年内置立数十兆笔UUID并发生一次重复。换句话说,每秒产生10亿笔UUID,100年后只产生一次重复的机率是50%。如果地球上每个人都各有6亿笔UUID,发生一次重复的机率是50%。

产生重复UUID并造成错误的情况非常低,是故大可不必考虑此问题。

机率也与乱数产生器的品质有关。若要避免重复机率提高,必须要使用奠基于密码学上的假乱数产生器来生成值才行。

http://zh.wikipedia.org/zh-cn/UUID

Java的UUID生成工具并发测试(2)

时间:2010-11-03 51cto博客 leizhimin

二、Java5的UUID

在Java5以后,UUID的生成成了小菜一碟的小事,直接生成即可。对此需要了解:

有 4 种不同的基本 UUID 类型:基于时间的 UUID、DCE 安全 UUID、基于名称的 UUID 和随机生成的 UUID。 这些类型的 version 值分别为 1、2、3 和 4。具体什么含义,看看JDK文档即可。

这里,主要想通过多线程生成UUID测试下,看看是否会重复,效率如何:

import java.util.UUID; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * Java的UUID生成工具并发测试 * * @author leizhimin 2010-7-10 16:25:13 */ public class TestUUID implements Runnable {          public 

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号