JAVA版数据库主键ID生成器

java

import java.util.concurrent.locks.Lock;

import java.util.concurrent.locks.ReentrantLock;

public class sequence {

private static final long ONE_STEP = 10;

private static final Lock LOCK = new ReentrantLock();

private static long lastTime = System.currentTimeMillis();

private static short lastCount = 0;

private static int count = 0;

@SuppressWarnings("finally")

public static String nextId()

{

LOCK.lock();

try {

if (lastCount == ONE_STEP) {

boolean done = false;

while (!done) {

long now = System.currentTimeMillis();

if (now == lastTime) {

try {

Thread.currentThread();

Thread.sleep(1);

} catch (java.lang.InterruptedException e) {

}

continue;

} else {

lastTime = now;

lastCount = 0;

done = true;

}

}

}

count = lastCount++;

}

finally

{

LOCK.unlock();

return lastTime+""+String.format("%03d",count);

}

}

public static void main(String[] args)

{

//测试

for(int i=0;i<1000;i++)

{

System.out.println(nextId());

}

}

}

据说如果是用在集群环境,需要在前面加上机器的编号,或者IP。

以上是 JAVA版数据库主键ID生成器 的全部内容, 来源链接: utcz.com/z/393853.html

回到顶部