From c967e56699699d6b4d06fcfcdbae4f6d8c71cc47 Mon Sep 17 00:00:00 2001 From: Stormeye Wu Date: Mon, 24 Jun 2019 16:32:19 +0800 Subject: [PATCH] =?UTF-8?q?[=E9=9B=AA=E8=8A=B1=E7=AE=97=E6=B3=95][?= =?UTF-8?q?=E4=BF=AE=E6=94=B9]:=E7=94=A8ip+processId=E4=BF=9D=E8=AF=81?= =?UTF-8?q?=E5=94=AF=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/iformall/common/IdWorker.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/common/IdWorker.java b/mallinkService/src/main/java/com/iformall/common/IdWorker.java index 66279fd0c..2074260c6 100644 --- a/mallinkService/src/main/java/com/iformall/common/IdWorker.java +++ b/mallinkService/src/main/java/com/iformall/common/IdWorker.java @@ -1,6 +1,5 @@ package com.iformall.common; -import com.iformall.exception.MallinkException; import com.iformall.utils.IPUtil; import java.lang.management.ManagementFactory; @@ -8,13 +7,21 @@ import java.net.UnknownHostException; import java.util.ArrayList; import java.util.List; +/** + * 产生唯一ID的snow flake + * 41(timestamp)+16(ip)+18(pid)+8(seq) + * + * @author changstone + * + */ + public class IdWorker { // ==============================Fields=========================================== /** 开始时间截 (2015-01-01) */ private final long twepoch = 1489111610226L; /** 机器id所占的位数 */ - private final long workerIdBits = 5L; + private final long workerIdBits = 9L; /** 数据标识id所占的位数 */ private final long dataCenterIdBits = 5L; @@ -70,8 +77,9 @@ public class IdWorker { 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; + Long workerId = Long.valueOf(ipArray[3]) & maxWorkerId; /// Long.valueOf(ipArray[2]) << 8 | + String pName = ManagementFactory.getRuntimeMXBean().getName(); + Long dataCenterId = Long.valueOf(pName.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)); @@ -166,7 +174,7 @@ public class IdWorker { final IdWorker idWorker = IdWorker.get(); List list = new ArrayList<>(); - for(int j=0;j< 10;j++) { + for(int j=0;j< 40;j++) { list.add(new Thread(() -> { long startTime = System.nanoTime(); for (int i = 0; i < 50000; i++) {