public class LinkId{ private static int linkId = 0; private static final int MaxId= 10000; public static synchronized int createId(){ if(linkId++>=MaxId)linkId=0; return linkId; } }
在补充个问题60位的数据怎么相加呀? Long seq = 999999999999999999999999999999999999999999999999999999999999L; 都报超出范围了. 这既有60位 不是说Long类型最大能保存64位的吗?
汗...不是64个数字叫64位.... long是8字节长,64个二进制位
1 如果你不需要连续,只要求递增,可以用一个单独的表保存当前最大的顺序号,然后每次读取这个号,加一,并更新回去。 hibernate里面有这种实现2 可以用数据库的自增长字段,比如 identity 或者 auto increasement类型的。他们会自动从当前最大的编号开始
一个saveNum类 public class saveNum(){ private int count; public int setCount(int count){ this.count=count; } public void getCount(){ return count; }另外一个类 public class getNum(){ private saveNum save; private int count=0; private int temp; public int getCount(save.setCount(temp)){ if(temp>0) { temp++; } else{ count++; temp=count; } return temp; }
public class LinkId{
private static int linkId = 0;
private static final int MaxId= 10000;
public static synchronized int createId(){
if(linkId++>=MaxId)linkId=0;
return linkId;
}
}
2楼的写法没错啊
看清楚,static的
而且还是用synchronized同步的,就算是多线程也能正常实现增量
这个可以不用加 synchronized 的。
在补充个问题60位的数据怎么相加呀?
Long seq = 999999999999999999999999999999999999999999999999999999999999L;
都报超出范围了. 这既有60位 不是说Long类型最大能保存64位的吗?
long是8字节长,64个二进制位
hibernate里面有这种实现2 可以用数据库的自增长字段,比如 identity 或者 auto increasement类型的。他们会自动从当前最大的编号开始
public class saveNum(){
private int count;
public int setCount(int count){
this.count=count;
}
public void getCount(){
return count;
}另外一个类
public class getNum(){
private saveNum save;
private int count=0;
private int temp;
public int getCount(save.setCount(temp)){
if(temp>0)
{
temp++;
}
else{
count++;
temp=count;
}
return temp;
}