tomcat 协议处理程序初始化失败_tomcat对AQS的扩展:使用LimitLatch控制连接数

863f3a892755394bd6d81cd2904f2e98.png

LimitLatch是一个共享性质的锁,这里的共享概念来自于AQS,指的是不同的线程可以同时获取该锁。本文开始之前,首先我要纠正之前的文章《面试官:谈一谈java中基于AQS的并发锁原理》的一个错误,LimitLatch并不是JDK实现的,而是tomcat实现的。

LimitLatch简介

jdk中对AQS的扩展有一个CountDownLatch,Latch是一个阀门的意思,CountDownLatch创建了一个阀门,之后阻塞,等待所有线程都执行结束并且countdown之后,才会继续执行。而本文要介绍的LimitLatch则更像是java中的Semaphore,用于控制资源的使用。

下面我们看一下LimitLatch中锁的实现:

private class Sync extends AbstractQueuedSynchronizer {
        private static final long serialVersionUID = 1L;    public Sync() {
        }    @Override    protected int tryAcquireShared(int ignored) {
            long newCount = count.incrementAndGet();//定义了AtomicLong类型的count数量,每次获取锁之后会加1        if (!released && newCount > limit) {
    //是否超过limit的限制            // Limit exceeded            count.decrementAndGet();//获取失败后减1            return -1;//返回-1代表获取锁失败,这是就只能进入队列了        } else {
                return 1;        }    }    @Override    protected boolean tryReleaseShared(int arg) {
            count.
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值