|
|
|
@@ -1,5 +1,13 @@ |
|
|
|
package com.iformall.common; |
|
|
|
|
|
|
|
import com.iformall.exception.MallinkException; |
|
|
|
import com.iformall.utils.IPUtil; |
|
|
|
|
|
|
|
import java.lang.management.ManagementFactory; |
|
|
|
import java.net.UnknownHostException; |
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.List; |
|
|
|
|
|
|
|
public class IdWorker { |
|
|
|
// ==============================Fields=========================================== |
|
|
|
/** 开始时间截 (2015-01-01) */ |
|
|
|
@@ -55,7 +63,24 @@ public class IdWorker { |
|
|
|
} |
|
|
|
|
|
|
|
public IdWorker() { |
|
|
|
this(0L, 0L); |
|
|
|
String ipAddr = ""; |
|
|
|
try { |
|
|
|
ipAddr = IPUtil.getLocalHostLANAddress().getHostAddress(); |
|
|
|
} catch (UnknownHostException e) { |
|
|
|
e.printStackTrace(); |
|
|
|
} |
|
|
|
String[] ipArray = ipAddr.split("\\."); |
|
|
|
Long ip = Long.valueOf(ipArray[2]) << 8 | Long.valueOf(ipArray[3]) & maxWorkerId; |
|
|
|
Long processId = Long.valueOf(ManagementFactory.getRuntimeMXBean().getName().split("@")[0]) & maxDataCenterId; |
|
|
|
|
|
|
|
if (workerId > maxWorkerId || workerId < 0) { |
|
|
|
throw new IllegalArgumentException(String.format("workerId can't be greater than %d or less than 0", maxWorkerId)); |
|
|
|
} |
|
|
|
if (dataCenterId > maxDataCenterId || dataCenterId < 0) { |
|
|
|
throw new IllegalArgumentException(String.format("dataCenterId can't be greater than %d or less than 0", maxDataCenterId)); |
|
|
|
} |
|
|
|
this.workerId = workerId; |
|
|
|
this.dataCenterId = dataCenterId; |
|
|
|
} |
|
|
|
|
|
|
|
//==============================Constructors===================================== |
|
|
|
@@ -139,14 +164,24 @@ public class IdWorker { |
|
|
|
public static void main(String[] args) { |
|
|
|
System.out.println(System.currentTimeMillis()); |
|
|
|
final IdWorker idWorker = IdWorker.get(); |
|
|
|
long startTime = System.nanoTime(); |
|
|
|
for (int i = 0; i < 50000; i++) { |
|
|
|
long id = idWorker.nextId(); |
|
|
|
System.out.println(id); |
|
|
|
System.out.println(String.valueOf(id)); |
|
|
|
System.out.println(String.valueOf(id).length()); |
|
|
|
List<Thread> list = new ArrayList<>(); |
|
|
|
|
|
|
|
for(int j=0;j< 10;j++) { |
|
|
|
list.add(new Thread(() -> { |
|
|
|
long startTime = System.nanoTime(); |
|
|
|
for (int i = 0; i < 50000; i++) { |
|
|
|
long id = idWorker.nextId(); |
|
|
|
System.out.println(Thread.currentThread().getId() + ", " + id); |
|
|
|
//System.out.println(String.valueOf(id)); |
|
|
|
//System.out.println(String.valueOf(id).length()); |
|
|
|
} |
|
|
|
System.out.println((System.nanoTime() - startTime) / 1000000 + "ms"); |
|
|
|
})); |
|
|
|
} |
|
|
|
for(int j=0;j<10;j++){ |
|
|
|
Thread thread = list.get(j); |
|
|
|
thread.start(); |
|
|
|
} |
|
|
|
System.out.println((System.nanoTime()-startTime)/1000000+"ms"); |
|
|
|
} |
|
|
|
|
|
|
|
} |