方案一:
如果沒有並發的話,訂單號只在一個線程中產生,不同訂單的時間戳不同,
時間戳+隨機數(自增數)區分訂單
如果有並發的話,並且訂單號在同一台主機產生多個進程,只要把進程的ID添加到序列號中就可以保證訂單號唯一。
如果有並發,訂單在不同主機中,把IP地址 CPU序列號 能區分的號碼添加到序列號中就能保證唯一。
方案二:
時間戳+用戶ID+隨機數+樂觀鎖
方案三:
可以用redis的原子遞增,做高可用集群
方案四:
java自帶的UUID
實例代碼
java中獲取線程ID
Thread.currentThread().getId()
java 獲取進程 ID
1. //java獲取進程ID 2. RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean(); 3. Field jvm = runtime.getClass().getDeclaredField("jvm"); 4. jvm.setAccessible(true); 5. VMManagement mgmt = (VMManagement) jvm.get(runtime); 6. Method pidMethod = mgmt.getClass().getDeclaredMethod("getProcessId"); 7. pidMethod.setAccessible(true); 8. int pid = (Integer) pidMethod.invoke(mgmt);
java 獲取 mac 地址
1. InetAddress ia = InetAddress.getLocalHost(); 2. byte[] mac = NetworkInterface.getByInetAddress(ia).getHardwareAddress(); 3. String macStr = DatatypeConverter.printHexBinary(mac);
