Tomcat的最大连接数实现

Tomcat的最大连接数通过LimitLatch来控制

protected LimitLatch initializeConnectionLatch() {

        if (maxConnections==-1) return null;

        if (connectionLimitLatch==null) {

            connectionLimitLatch = new LimitLatch(getMaxConnections());

        }

        return connectionLimitLatch;

    }

LimitLatch有一个内部类Sync继承了AbstractQueuedSynchronizer 这个是juc的基础

private class Sync extends AbstractQueuedSynchronizer {

        private static final long serialVersionUID = 1L;

        public Sync() {

        }

        @Override

        protected int tryAcquireShared(int ignored) {

            long newCount = count.incrementAndGet();

            if (!released && newCount > limit) {

                // Limit exceeded

                count.decrementAndGet();

                return -1;

            } else {

                return 1;

            }

        }

        @Override

        protected boolean tryReleaseShared(int arg) {

            count.decrementAndGet();

            return true;

        }

    }

相当于实现了一个共享锁,其中count是当前的连接数,limit是所配置的最大连接数,如果当前连接数大于所配置最大连接数放回-1,则阻塞,否则返回1,获取锁

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,083评论 19 139
  • 下列面试题都是在网上收集的,本人抱着学习的态度找了下参考答案,有不足的地方还请指正,更多精彩内容可以关注我的微信公...
    Java团长阅读 28,157评论 13 1,115
  • feisky云计算、虚拟化与Linux技术笔记posts - 1014, comments - 298, trac...
    不排版阅读 3,939评论 0 5
  • 前面,我们大概了解了matplotlib中基本的绘图方式,现在,我们来看看在pandas中绘图的方式,pandas...
    橘猫吃不胖阅读 3,298评论 0 50
  • 1.明月老师在《你的写作纯属自嗨吗?》一文中谈到了写作的“四有文章”,有趣、有用、有料、有力。给我启发最大的是有趣...
    沛享人生阅读 352评论 4 1