java生成16位唯一值做主键

仅限一台服务器

关于多个表主键的生成,在不建议扩展主键长度的前提下,通过对时间戳加锁来解决主键重复问题

import org.apache.commons.lang.StringUtils;

import com.fto.sql.UniqueTimestamp;

public class Test {
	public static UniqueTimestamp UT = new UniqueTimestamp();

	public static String generateId() {
		synchronized (UT) {
			return StringUtils.leftPad(Long.toHexString(UT.getUniqueTimestamp()).toUpperCase(), 16, '0');
		}
	}

	public static void main(String[] args) {
		for (int i = 0; i < 100; i++) {
			new Thread(new Runnable() {
				@Override
				public void run() {
					System.out.println(generateId());
				}
			}).start();
		}
	}
}

从100个线程同时执行的结果来看,没有重复,但是目前还有几个疑问:

1.会不会出现两次执行时间差小于时间戳最小单位?

2.虽然可能解决了问题,但是效率是否降低影响整体?

3.回到问题,除了此方法,是否可以生成16位唯一值?

阅读更多
文章标签: synchronized oracle
个人分类: java 数据库
想对作者说点什么? 我来说一句

java生成和解析二维码

-

学院

1970年01月01日 08:00

Java随机数生成主键(16位)

2011年04月11日 660B 下载

uuid生成16位的,唯一码

2012年12月04日 7KB 下载

没有更多推荐了,返回首页

不良信息举报

java生成16位唯一值做主键

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭