1、UUID 的概念
UUID(Universally Unique Identifier):通用唯一識別碼,是一種軟件建構的標准。
UUID 目的是讓分布式系統中的所有元素,都能有唯一的辨識信息,而不需要通過中央控制端來做辨識信息的指定。
UUID是指在一台機器上生成的數字,它保證對在同一時空中的所有機器都是唯一的。
2、UUID的組成
UUID由以下幾部分組合:
(1)當前日期和時間,UUID的第一個部分與時間有關,如果你在生成一個UUID之后,過幾秒又生成一個UUID,則第一個部分不同,其余相同。
(2)時鍾序列。
(3)全局唯一的IEEE機器識別號,如果有網卡,從網卡MAC地址獲得,沒有網卡以其他方式獲得。
UUID的唯一缺陷在於生成的結果串會比較長。
標准的UUID格式為:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12)。
————————————————
3、UUID.randomUUID()使用
直接生成的ID中有“-”存在,如果不需要,可以使用replace()方法去掉。
import java.util.UUID;
public class UUIDTest {
public static void main(String[] args) {
String uId = UUID.randomUUID().toString();
System.out.println(uId);
System.out.println(uId.replace("-", ""));
}
}
4. 我給他指點了一下可以簡單的使用 uuid 來做,但是 uuid 產生的是一個不重復的字符串。用來當做訂單編號,顯然不太合適。但是我們可以變個魔術,來讓它變成一組數字。原理其實很簡單,就是借助 java 中 String 類的 hashcode() 方法即可。整個代碼實現如下所示:
1
2
3
4
5
6
7
8
9
10
11
|
public
static
String createOrderId() {
int
machineId =
1
;
//最大支持1-9個集群機器部署
int
hashCodeV = UUID.randomUUID().toString().hashCode();
if
(hashCodeV <
0
) {
//有可能是負數
hashCodeV = - hashCodeV;
}
// 0 代表前面補充0
// 4 代表長度為4
// d 代表參數為正數型
return
machineId+String.format(
"%015d"
, hashCodeV);
}
|
通過我對多線程的測試,結果是並發在2000左右都沒有問題,可以放心的使用。
參考: https://blog.csdn.net/pro_fan/article/details/89219385