System.currentTimeMillis() 只是获取当前的时间戳,单位是毫秒,但是这并不是唯一的. 如果你在1毫秒中进行了两次操作,那么这两个ID就是相等的. 问题的解决看你要求的精度如何了.一般可以使用当前的时间戳作为Random发生器的种子. 比如Random ran = new Random(System.currentTimeMillis()); 然后需要唯一ID的时候使用ran.nextLong()获取,实际上这样的选择还是看你对于ID精度的要求.可以使用更加复杂的随机算法来产生,比如说产生一串随机字符串加上数字等等.
楼主是想要这个呀,可以 long id=new Date().getTime(); long buf=id; id=new Date().getTime(); while(id==buf) { id=new Date().getTime(); } buf=id;
String id = String.valueOf(now.getTime());
跟楼上意思一样
long id=new Date().getTime();
发现在很短得时间间隔内生成的两个节点id相同。如何解决,谢谢!
如果你在1毫秒中进行了两次操作,那么这两个ID就是相等的.
问题的解决看你要求的精度如何了.一般可以使用当前的时间戳作为Random发生器的种子.
比如Random ran = new Random(System.currentTimeMillis());
然后需要唯一ID的时候使用ran.nextLong()获取,实际上这样的选择还是看你对于ID精度的要求.可以使用更加复杂的随机算法来产生,比如说产生一串随机字符串加上数字等等.
long id=new Date().getTime();
long buf=id;
id=new Date().getTime();
while(id==buf) {
id=new Date().getTime();
}
buf=id;
用这个比较好些,重复几率比较小。
不过实际开发中,编码最好为数据库信息编号和时间共同组成好一些