java多线程之线程安全队列LinkedBlockingQueue

在项目开发中,为解决批量上传商品到购物车时可能造成的服务器压力,采用线程安全的LinkedBlockingQueue实现生产者消费者模式。LinkedBlockingQueue是一种FIFO(先进先出)的队列,提供多种操作方法,如add、offer、put等。本文介绍了如何定义生产者和消费者,并在前端加入队列和消费者移除队列的操作。
摘要由CSDN通过智能技术生成

最近公司在开发项目中,需要通过excel批量上传将商品加入购物车,如果excel中商品过多,用户访问比较多的情况下,给服务器造成的压力极大,稍有不慎,极容易造成服务器崩溃,所以引入队列(实现生产者、消费者模式),保证服务器正常运行。

1、什么是队列Queue

简而言之:队列是一种数据结构,其特点就是先进先出,是作为生产者、消费者的首选。

2、BlockingQueue提供了以下几个方法:

add        增加一个元索                     如果队列已满,则抛出一个IIIegaISlabEepeplian异常
remove   移除并返回队列头部的元素    如果队列为空,则抛出一个NoSuchElementException异常
element  返回队列头部的元素             如果队列为空,则抛出一个NoSuchElementException异常
offer       添加一个元素并返回true       如果队列已满,则返回false
poll         移除并返问队列头部的元素    如果队列为空,则返回null
peek       返回队列头部的元素             如果队列为空,则返回null
put         添加一个元素                      如果队列满,则阻塞
take        移除并返回队列头部的元素     如果队列为空,则阻塞

3、LinkedBlockingQueue implements BlockingQueue

LinkedBlockingQueue 是线程安全的,实现了先进先出的特性,是生产者、消费者模式的选择之一。

4、定义买家批量加入购物车生产者

public class BuyerBatchAddCartProducer implements Runnable {

    private static final Logger log = LoggerFactory.getLogger(BuyerBatchAddCartProducer.class);

    private BuyerBatchExcelProcessPo buyerBatchExcelProcessPo;

    public void setBuyerBatchExcelProcessPo(BuyerBatchExcelProcessPo buyerBatchExcelProcessPo) {
        this.buyerBatchExcelProcessPo = buyerBatchExcelProcessPo;
    }

    @Override
    public void run() {
        log.info("添加前队列的大小:" + WebExecutorServicePool.getBuyerBatchQueue().size());
        boolean flag = WebExecutorServicePool.getBuyerBatchQueue().offer(buyerBatchExcelProcessPo);
        log.info("添加后队列的大小:" + WebExecutorServicePool.get
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值