单据流水号,并发避免重复问题JAVA

本文介绍如何在Java中处理单据流水号的并发生成,避免重复。通过预先生成一批单号并存入内存,使用加锁机制控制并发访问,当单号不足时再重新生成。提供了相关代码示例,但注意在集群环境中需要使用分布式锁进行处理。
摘要由CSDN通过智能技术生成

java,面对单据的流水号,避免重复和并发问题

先讲一下思路

把一批单号生成,放到内存(你要连续,就放缓存),然后通过加锁的方式,去控制并发和重复的问题,当只剩下几个单号的时候,再重新生成一批

OK,上代码

NO.1 首先得有个配置,定义每次生成多少个单据号出来(放缓存里,不够了再生成)


// 配置项属性:
// 列名:  val(当前值) , interval (增长区间), n(倍数)
// 其中  val = val + interval * n
//
// 开始时 val = 1 , interval = 10 , n = 2    ==>  [1 , 20]  把这个区间信息记录下来,当取到 20这个值时,就得更新配置信息,更新为如下:
//       val = 21 , interval = 10 , n = 2    ==>  [21 , 40] 此时,区间信息增加了,同样也是存起来.....以此类推....一直累加,一直获取

/**对应配置信息的封装类*/
public class SysConf {
   

    //当前值
    private long val;
    //增长区间
    private int interval;
    //倍数
    private int n;

    public long getVal() {
   
        return val;
    }

    public void setVal(long val) {
   
        this.val = val;
    }

    public int getInterval() {
   
        return interval;
    }

    public void setInterval(int interval) {
   
        this.interval = interval;
    }

    public int getN() {
   
        return n;
    }

    public void setN(int n) {
   
        this.n = n;
    }
}

NO.2 假设这个配置项是存在数据库(或缓存中) — 这里就模拟一下


/**对应的操作类, -- 即对配置信息进行查询和更新*/
public class DbData {
   

    static SysConf sysConf;

    public static SysConf query(){
   
        sysConf = new SysConf();
        //初始单据号为1
        sysConf.setVal(1);
        //增长区间设为5 (一般是固定值)
        sysConf.setInterval(5);
        //增长倍数设置为2 (一般是固定值)
        sysConf.setN(2);

        return sysConf;
    }

    public static SysConf update(){
   
        //更新的时候,更新val就行了,因为 interval 和 n 一般都是固定值
        long val = sysConf.getVal() + sysConf.getInterval() * sysConf.getN();
        sysConf.setVal(val);
        return sysConf;
    }
}

NO.3 真正生成单据号的类


public class TicketNoTool {
   

    //边界值(超过这个值,就得重新更新数据库)
    
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值