import java.util.concurrent.TimeUnit;
import org.apache.log4j.Logger;
public class StrictMicroSecondTimeBasedGuid
{
private final static Logger logger = Logger
.getLogger(StrictMicroSecondTimeBasedGuid.class);
private static final long MICRO_IN_MILL = 1000;
private static final long NANO_IN_MICRO = 1000;
private static long baseNanoTime;
private static long baseTimeInMicro;
private static long lastGuid;
static
{
/*
* Nanosecond time's reference is not known, therfore following logic is
* needed to calculate time in micro without knowing refrence point of
* nano time*
*/
baseNanoTime = System.nanoTime();
baseTimeInMicro = System.currentTimeMillis() * MICRO_IN_MILL;
lastGuid = baseTimeInMicro;
}
public static synchronized Long newGuid()
{
long newGuid;
while ((newGuid = calNewTimeInMicro())
java.util.UUID.randomUUID();
。请看一下捆绑在Java 5及以后版本中的UUID类。
比如说。
这取决于你想要什么样的UUID。
标准的Java
UUID
类会生成版本4(随机)UUID。 (更新 - 版本3 (名称)UUIDs也可以被生成。)它也可以处理其他变体,尽管它不能生成它们。 (在这种情况下,"handle"意味着从long
,byte[]
或String
表示中构建UID
实例,并提供一些适当的访问器。)Java UUID Generator (JUG)]7 实现声称支持RFC-4122定义的所有3种UUID类型...尽管RFC实际上定义了4种类型并提到了第5种类型。
关于UUID类型和变体的更多信息,在Wikipedia中有一个很好的总结,而血腥的细节在RFC 4122和其他规范中。
只是用一个例子来扩展Mark Byers'的答案。
其他答案都是正确的,尤其是Stephen C的这个。
Reaching Outside Java
出于安全考虑,在Java内生成UUID][1]值仅限于第4版(随机)。
如果你想要其他版本的UUID,一个途径是让你的Java应用程序到达[JVM][3]之外,通过调用来生成UUID。
几乎每个操作系统都捆绑了<br />。 例如,在Mac OS X、BSD和Linux中找到的[
uuidgen
][4]。使用[JDBC][5]来检索数据库服务器上生成的UUID.
例如,[uuid-ossp`][6]扩展经常与[Postgres][7]捆绑在一起。 该扩展可以生成版本1、3、4的值,另外还有一些变化。
uuid_generate_v1mc()
- 生成版本1的UUID,但使用随机的多播MAC地址代替计算机的真实MAC地址。uuid_generate_v5(namespace uuid, name text)
- 生成版本5的UUID,除了使用SHA-1作为散列方法外,它的工作原理与版本3的UUID相同。例如,UUID生成器可以创建版本1& 3以及无值和GUID。
[1]: http://docs.oracle.com/javase/8/docs/api/java/util/UUID.html#randomUUID-- 2:
[3]: https://www.google.com/url?sa=t&rc=j&q=&esrc=s&source=web&cd=2&cad=rja&uact=8&ved=0CCIQFjABahUKEwj1jKa_zuDGAhXEEpIKHYwoAQw&url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FJava_virtual_machine&ei=kCSoVfWEDcSlyASM0YRg&usg=AFQjCNE6RcWP8IuAXecy2dIl9NayBO_iBg&sig2=0JkiHdYJ1SDk7s65x8N-vA&bvm=bv.97949915,d.aWw。 [4]: http://www.freebsd.org/cgi/man.cgi?query=uuidgen&sektion=1 [5]: [5]:https://en.wikipedia.org/wiki/Java_Database_Connectivity [6]: http://www.postgresql.org/docs/current/static/uuid-ossp.html [7]: http://www.postgresql.org/ 8:
9: