首先列举三个概念:

最大连接数:连接池维护的最大连接数;

空闲连接池:维护着空闲链接

活动连接池:维护着正在使用的链接

下面用伪代码来说明拿取一个连接工作过程:

if(空闲连接池.size()!=0){

在空闲连接池拿出一个连接提供使用,并将其标识到活动连接池中;

}else{

if(最大连接数.size()>活动连接池.size()){

在新创建一个连接提供使用,并将其标识到活动连接池中;

}else{

如果活动连接池最早的那个已过期,则释放,提供使用;

否则线程等待,之后循环此过程

}

}

描述

1.  先看是否有空闲(idle)状态下的PooledConnection对象,如果有,就直接返回一个可用的PooledConnection对象;否则进行第2步。

2.  查看活动状态的PooledConnection池activeConnections是否已满;如果没有满,则创建一个新的PooledConnection对象,然后放到activeConnections池中,然后返回此PooledConnection对象;否则进行第三步;

3.  看最先进入activeConnections池中的PooledConnection对象是否已经过期:如果已经过期,从activeConnections池中移除此对象,然后创建一个新的PooledConnection对象,添加到activeConnections中,然后将此对象返回;否则进行第4步。

4.  线程等待,循环1步

Mybatis的pooled连接池工作原理相关推荐

  1. jdbc连接池工作原理_JDBC连接实际上如何工作?

    jdbc连接池工作原理 The JDBC Connection interface is a part of java.sql package. The java.sql.Connection int ...

  2. mysql连接池的工作原理_连接池工作原理

    连接池工作原理 连接池技术的核心思想是连接复用,通过建立一个数据库连接池以及一套连接使用.分配和管理策略,使得该连接池中的连接可以得到高效.安全的复用,避免了数据库连接频繁建立.关闭的开销. 连接池的 ...

  3. 没有手动提交事务,Mybatis 的 POOLED 连接池炸了

    错误原因: 事务不关,并且非事务交替进行 总的来说,就是先开启了事务连接,未提交或关闭,导致连接池连接全部占满. 此时进行一次非事务连接操作,但是因为此时已经没有可以空闲的连接,并且创建的连接数已经最 ...

  4. MyBatis复习(九):MyBatis整合C3P0连接池

    为什么引入连接池 首先我们要明白," 建立数据库连接 " 是相当消耗资源和时间的,同时,建立数据库连接的数量也是有限的(所以在初学时,才强烈要求操作完后,一定要记得关闭数据库连接, ...

  5. 连接池的原理以及分析

    day21-连接池和DBUtils 今日内容 连接池 自定义连接池---------------了解即可(熟练装饰者设计模式) 难点 使用第三方连接池---------重点\掌握 C3P0 DRUID ...

  6. python连接池原理_python redis之连接池的原理

    python redis之连接池的原理 什么是连接池 通常情况下, 当我们需要做redis操作时, 会创建一个连接, 并基于这个连接进行redis操作, 操作完成后, 释放连接, 一般情况下, 这是没 ...

  7. springboot整合mybatis 使用HikariCP连接池

    springboot整合mybatis 使用HikariCP连接池 前言 Springboot让Java开发更加美好,本节主要讲的是使用Hikari数据库连接池,如果需要使用druid连接池的请看我另 ...

  8. c++内存池工作原理

    6.1 自定义内存池性能优化的原理 如前所述,读者已经了解到"堆"和"栈"的区别.而在编程实践中,不可避免地要大量用到堆上的内存.例如在程序中维护一个链表的数据 ...

  9. 线程池工作原理和实现原理

    为什么要使用线程池 平时讨论多线程处理,大佬们必定会说使用线程池,那为什么要使用线程池?其实,这个问题可以反过来思考一下,不使用线程池会怎么样?当需要多线程并发执行任务时,只能不断的通过new Thr ...

  10. 【源码阅读计划】浅析 Java 线程池工作原理及核心源码

    [源码阅读计划]浅析 Java 线程池工作原理及核心源码 为什么要用线程池? 线程池的设计 线程池如何维护自身状态? 线程池如何管理任务? execute函数执行过程(分配) getTask 函数(获 ...

最新文章

  1. mysql 写锁需要等待读锁释放吗_Mysql实战45讲笔记:5、全局锁和表锁
  2. 打印文件测试的测试点
  3. 如何在 JBoss AS 7 中使用 Service Archive SAR 文件
  4. 请回答一下Java中有几种线程池及实现过程?
  5. ThreadLocal的学习
  6. 日常问题——hadoop启动后发现namenode没有启动,但是排除了格式化过度的问题
  7. 如何查询Linux服务的作用
  8. Hive 连接 HBase 错误处理
  9. 解码h264和h265需要的cpu性能
  10. 企业开票信息税号查询API接口服务
  11. 刚刚想起猴子布丁,查了点资料,自己实践了下,记录汇总下。
  12. 手机知识:手机OTG知识介绍,看完你就懂了
  13. 程序员英语 - 读音
  14. 大三学生HTML期末作业,网页制作作业——HTML+CSS+JavaScript饮品饮料茶(7页)
  15. ubuntu GStreamer + QT多媒体播放器开发(三)
  16. 扣扣机器人唱歌_qq小冰唱歌指令生成器下载-qq小冰唱歌关键字命令生成器 _5577安卓网...
  17. centos7.4 编译 找不到 -lGL
  18. Activiti6 流程模型图中文显示为方块□□
  19. 集成运放虚短,虚断,虚地
  20. 基于 Flink 构建关联分析引擎的挑战和实践

热门文章

  1. 一文读懂社交网络分析(附应用、前沿、学习资源)
  2. SPSS学习(三)可靠性(用α系数衡量)
  3. PrintShield打印监控系统
  4. linux中孚软件,中孚主机监控与审计系统
  5. DELL_R820服务器安装 server2008 R2x64缺少所需的CDDVD驱动器设备驱动解决方法
  6. STM32H7+USB3300+SD作为U盘速度慢的问题
  7. 百兆1光4电工业级光纤收发器4口百兆光纤收发器工业导轨式发送机导轨式以太网光电转换器
  8. AD13 plugins 安装
  9. 多测师拱墅校区肖sir___性能测试之单个接口性能和多个接口性能测试(3)
  10. oracle大写数字转小写,求助oracle小写金额转换大写金额的函数