现在有这样一个要求,生成注水,最大为999999,6位的长度,
开始时,是000001,以后逐个递增。一天内保证唯一,如果大于最大值,则新开一个流水。
要求在高并发下,操作,获取,

解决方案 »

  1.   

    在数据库建个序列:
    -- Create sequence 
    create sequence SEQ_TEST
    minvalue 1
    maxvalue 999999999999999999999999999
    start with 1
    increment by 1
    cache 20;
    取流水号用这个SQL即可:
    select TO_CHAR(MOD(SEQ_TEST.Nextval,1000000), '000000') CurrNo from dual;
      

  2.   

    并发情形下注意同步就OK了,如下public class NumberIncrementor {
    private static int counter = 1; public static void main(String[] args) {
    long sec = 0;
    while (sec++<9999999)
    System.out.println(getSequence());
    } synchronized public static String getSequence(){
    if (++counter>999999) counter=1;
    return String.format("%06d", counter);
    }
    }
      

  3.   

    有点小问题
    private static int counter = 0;
      

  4.   

    再提供给你一个高效的sql语句select lpad(SEQ_TEST.nextval,6,'0') from dual
      

  5.   


        synchronized public static String getSequence(){
            if (++counter>999999) counter=1;
    }
            这样可行