java生成uuid_Java UUID
时间: 2023-07-10 14:31:38 浏览: 131
生成 UUID(通用唯一标识符)是 Java 中常见的任务之一。可以使用 java.util.UUID 类来生成 UUID。以下是一个简单的示例:
```java
import java.util.UUID;
public class UUIDGenerator {
public static void main(String[] args) {
UUID uuid = UUID.randomUUID();
System.out.println("UUID: " + uuid.toString());
}
}
```
此代码将生成一个 UUID 并将其打印到控制台。UUID 是一个 128 位的数值,通常呈现为 36 个字符的字符串,例如:8f68ee5d-7a97-4b5d-bb8d-1d4f7d4a3b97。
相关问题
java 分布式 uuid_Java分布式唯一ID生成方案——比UUID效率更高的生成id工具类
Java分布式唯一ID生成方案有很多种,其中一种比较常用的方案是基于Snowflake算法的ID生成方案。
Snowflake算法是一种基于时间序列生成唯一ID的算法,它可以在分布式系统中生成唯一的、有序的、趋势递增的ID。Snowflake算法生成的ID是一个64位的整数,它的结构如下:
```
0 - 41位时间戳 - 10位机器标识 - 12位序列号
```
其中,时间戳占用了41位,可以表示2^41-1个数字,大约可以支持生成69年的ID;机器标识占用了10位,可以表示1023个不同的机器;序列号占用了12位,可以表示4095个不同的序列号。
Snowflake算法的实现比较简单,可以使用Java的AtomicLong类来实现序列号的自增。具体的实现可以参考下面的代码:
```java
public class SnowflakeIdGenerator {
private static final long START_TIMESTAMP = 1577808000000L; // 2020-01-01 00:00:00
private static final long MACHINE_ID_BITS = 10L;
private static final long SEQUENCE_BITS = 12L;
private static final long MACHINE_ID_OFFSET = SEQUENCE_BITS;
private static final long TIMESTAMP_OFFSET = MACHINE_ID_BITS + SEQUENCE_BITS;
private static final long MAX_MACHINE_ID = (1L << MACHINE_ID_BITS) - 1L;
private static final long MAX_SEQUENCE = (1L << SEQUENCE_BITS) - 1L;
private static long machineId = 0L;
private static long sequence = 0L;
private static long lastTimestamp = -1L;
static {
String machineName = "";
try {
machineName = InetAddress.getLocalHost().getHostName();
} catch (UnknownHostException e) {
e.printStackTrace();
}
machineId = Math.abs(machineName.hashCode()) % MAX_MACHINE_ID;
}
public synchronized static long nextId() {
long currentTimestamp = System.currentTimeMillis();
if (currentTimestamp < lastTimestamp) {
throw new IllegalStateException("Clock moved backwards. Refusing to generate id");
}
if (currentTimestamp == lastTimestamp) {
sequence = (sequence + 1L) & MAX_SEQUENCE;
if (sequence == 0L) {
currentTimestamp = waitUntilNextMillis(currentTimestamp);
}
} else {
sequence = 0L;
}
lastTimestamp = currentTimestamp;
return ((currentTimestamp - START_TIMESTAMP) << TIMESTAMP_OFFSET)
| (machineId << MACHINE_ID_OFFSET)
| sequence;
}
private static long waitUntilNextMillis(long currentTimestamp) {
while (currentTimestamp == lastTimestamp) {
currentTimestamp = System.currentTimeMillis();
}
return currentTimestamp;
}
}
```
使用这个类可以生成全局唯一的ID,可以在分布式系统中使用。
java 生成 uuid
在 Java 中生成 UUID 可以使用 java.util.UUID 类。该类提供了两种方法来生成 UUID:
1. 使用静态方法 randomUUID() 生成随机 UUID:
```java
import java.util.UUID;
public class Example {
public static void main(String[] args) {
UUID uuid = UUID.randomUUID();
System.out.println(uuid.toString());
}
}
```
2. 使用构造函数创建指定 UUID:
```java
import java.util.UUID;
public class Example {
public static void main(String[] args) {
UUID uuid = new UUID(0x123456789abcdefL, 0xabcdef123456789L);
System.out.println(uuid.toString());
}
}
```
注意:UUID 是唯一标识符,生成的 UUID 在不同的机器上可能会不同。
阅读全文