连接池的工作原理&&线程池的工作原理

举报
红云v587 发表于 2019/06/26 21:04:15 2019/06/26
【摘要】 连接池: 我们后端在写项目后端代码的时候都是需要连接数据库的,那么我没没连接一次数据库都是需要建立一次连接,建立连接是一个费时的活动,每次都得花费0.05s~1s的时间,而且系统还要分配内存资源。但是如果项目比较大,访问次数也比较多的时候会导致每次产生多次连接而且连接时间也会比较长,这时候我们就会想到为数据库连接建立一个“缓冲池”,也就是我们说的连接池,预先在缓冲池中...

连接池:


             我们后端在写项目后端代码的时候都是需要连接数据库的,那么我没没连接一次数据库都是需要建立一次连接,建立连接是一个费时的活动,每次都得花费0.05s~1s的时间,而且系统还要分配内存资源。但是如果项目比较大,访问次数也比较多的时候会导致每次产生多次连接而且连接时间也会比较长,这时候我们就会想到为数据库连接建立一个“缓冲池”,也就是我们说的连接池,预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量﹑使用情况,为系统开发﹑测试及性能调整提供依据。


连接池代码       


    public class MyDataSource implements DataSource {

              //链表 --- 实现栈结构

              privateLinkedList<Connection> dataSources = new LinkedList<Connection>();

 

              //初始化连接数量

              publicMyDataSource() {

                     //一次性创建10个连接

                     for(int i = 0; i < 10; i++) {

                            try {

                               //1、装载sqlserver驱动对象

                               DriverManager.registerDriver(new SQLServerDriver());

                               //2、通过JDBC建立数据库连接

                               Connection con =DriverManager.getConnection(

                                  "jdbc:sqlserver://192.168.2.6:1433;DatabaseName=customer", "sa", "123");

                               //3、将连接加入连接池中

                               dataSources.add(con);

                            } catch (Exception e) {

                               e.printStackTrace();

                            }

                     }

              }

 

              @Override

              publicConnection getConnection() throws SQLException {

                     //取出连接池中一个连接

                     finalConnection conn = dataSources.removeFirst(); // 删除第一个连接返回

                     returnconn;

              }

 

              //将连接放回连接池

              publicvoid releaseConnection(Connection conn) {

                     dataSources.add(conn);

                     }

       }

线程池原理:


                       线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务


Java四种线程池的使用:


  Java通过Executors提供四种线程池,分别为:


  newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。


  newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。


  newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。


  newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。