JAVA版数据库主键ID生成器
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