【队列 高并发】java web瞬间高并发的解决方法

通过分析高并发请求的顺序性,利用Java的BlockingQueue(如LinkedBlockingQueue)实现线程安全的队列,限制并发量。当队列满时,可选择丢弃请求或给予响应。通过生产者消费者模型,确保请求按顺序处理,适用于多服务器部署环境,但需考虑数据库的锁和隔离级别问题。
摘要由CSDN通过智能技术生成

1、任何的高并发,请求总是会有一个顺序的

2、java的队列的数据结构是先进先出的取值顺序

3、BlockingQueue类(线程安全)(使用方法可以百度)

一般使用LinkedBlockingQueue

利用以上几点,我们可以把高并发时候的请求放入一个队列,队列的大小可以自己定义,比如队列容量为1000个数据,那么可以利用过滤器或者拦截器把当前的请求放入队列,如果队列的容量满了,其余的请求可以丢掉或者作出相应回复

具体实施:

利用生产者、消费者模型:

将队列的请求一一处理完。

 

上代码:

/**
 * @author fuguangli
 * @description 前沿消费者类
 * @Create date:    2017/3/7
 * @using   EXAMPLE
 */
public class Customer implements Runnable{


    /**
     *         抛出异常    特殊值        阻塞         超时
     插入    add(e)    offer(e)    put(e)    offer(e, time, unit)
     移除    remove()    poll()    take()    poll(time, unit)
     检查    element()    peek()    不可用    不可用

     */
    private BlockingQueue blockingQueue;
    private AtomicInteger count = new AtomicInteger();
    public Customer(BlockingQueue blockingQueue) {
        this.blockingQueue = blockingQueue;
    }

    /**
     * When an object implementing interface <code>Runnable</code> is used
     * to create a thread, starting the thread causes the object's
     * <code>run</code> method to be called in that separately executing
     * thread.
     * <p/>
     * The general c
  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值