利用阻塞队列优化用户下单案例

一 案例场景

一般的下单流程如下图,先判断用户有没有资格/商品的库存,之后创造订单,然后处理下一次下单请求,这不利于高并发场景,我们把一部分处理流程分离出来,交给其他子线程处理,主线程处理是否符合要求即可。

 二代码实现

//阻塞队列: 当队列没有数据时进行阻塞,add添加数据
    // 缺点:超出内存大小,出现溢出  数据不安全
    private static ArrayBlockingQueue<VoucherOrder> abq = new ArrayBlockingQueue<>(1024 * 1024);
    //线程池
    private static ExecutorService Thread = Executors.newSingleThreadExecutor();


  //此注解作用:当前类初始化完毕之后自动执行该方法
    @PostConstruct
    private void ioin() {

        Thread.submit(new a());
    }




 //用来执行请求
    private class a implements Runnable {

        @Override
        public void run() {
            //为什么为turn?,因为不是执行一次就结束,因为是阻塞队列的特点
            while (true) {
                try {
                    //通过take获取对象,自然是第一个了
                    VoucherOrder take = abq.take();
                    // 逻辑:往数据库里新建订单和redis 插入已下单用户id

                    System.out.println(" __" );

                } catch (InterruptedException e) {
                    System.err.println("阻塞队列异常");
                }

            }
        }
    }
  // 创造订单
    public void addOrder() {
        VoucherOrder v = new VoucherOrder();
        abq.add(v);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值