long id=new Date().getTime();
是当前时间的唯一的编号……
System.currentTimeMillis() 只是获取当前的时间戳,单位是毫秒,但是这并不是唯一的.
如果你在1毫秒中进行了两次操作,那么这两个ID就是相等的.
问题的解决看你要求的精度如何了.一般可以使用当前的时间戳作为Random发生器的种子.
比如Random ran = new Random(System.currentTimeMillis());
然后需要唯一ID的时候使用ran.nextLong()获取,实际上这样的选择还是看你对于ID精度的要求.可以使用更加复杂的随机算法来产生,比如说产生一串随机字符串加上数字等等.
个人认为,以上问题可以分为数据库是否设为并发操作和程序实际操作两部分进行。
System.currentTimeMillis();
用这个比较好些,重复几率比较小。
不过实际开发中,编码最好为数据库信息编号和时间共同组成好一些