java——池、线程池、连接池

一.池
池(Pool)技术在一定程度上可以明显优化服务器应用程序的性能,提高程序执行效率和降低系统资源开销。
这里所说的池是一种广义上的池,比如数据库连接池、线程池、内存池、对象池等。
其中,对象池可以看成保存对象的容器,在进程初始化时创建一定数量的对象。
需要时直接从池中取出一个空闲对象,用完后并不直接释放掉对象,而是再放到对象池中以方便下一次对象请求可以直接复用。
其他几种池的设计思想也是如此,池技术的优势是,可以消除对象创建所带来的延迟,从而提高系统的性能。


二.数据库连接池
0.JDBC
  JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。
  JDBC访问数据库的步骤:
(1)加载JDBC驱动程序;
(2)建立数据库连接;
(3)创建操作数据库SQL的Statement、PreparedStatement或CallableStatement对象;
(4)执行语句并分析执行结果;
(5)关闭连接。
1.不使用数据库连接池的步骤:用户——>servlet——>Dao——>DB
    a.TCP建立连接的三次握手
    b.MySQL认证的三次握手
    c.真正的SQL执行
    d.MySQL的关闭
    e.TCP的四次握手关闭
可以看到,为了执行一条SQL,却多了非常多我们不关心的网络交互。
2.使用了连接池,用户——>servlet——>(Dao<——>连接池pool)——>DB,可以参考如下链接同学的总结,挺到位:
https://blog.csdn.net/fangquan1980/article/details/52429903
访问数据库,需要java和数据库通过jdbc建立一个一个的连接,连接池本质上是开放数据库连接的缓存。
3.常见的几种:
  proxool 更新时间截止2008年。速度可以,稳定性稍差,发较高的情况下会出错。
  c3p0 太古老,代码及其复杂,不利于维护。貌似都比它强。
  dbcp 是 apache上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。
  druid 是alibba出品的一个功能比较全面,且扩展性较好的数据库连接池,比较方便对jdbc接口进行监控跟踪等。
  BoneCP 13年前最快的连接池项目。2013年后不再更新,心灰意冷。
  HikariCP 光连接池,目前被SpringBoot2官方推荐使用的数据库连接池。
4.大体区别:
  4.1:性能方面 HikariCP>Druid>tomcat-jdbc>dbcp>c3p0 。hikariCP的高性能得益于最大限度的避免锁竞争。
  4.2:druid功能最为全面,sql拦截等功能,统计数据较为全面,具有良好的扩展性。
  4.3:综合性能,扩展性等方面,可考虑使用druid或者hikariCP连接池。
  4.4:可开启prepareStatement缓存,对性能会有大概20%的提升。


三.线程池
1.线程池:
  java后台,在运行一个功能时,都需要要创建一个线程,而线程池可以创建保留缓存一定量的线程,在一个虚拟的容器,即线程池
  在再次使用时,就可以优先先去线程池中获取,避免频繁的创建和销毁线程以提高性能。
2.常见的线程池如下:
  java.util.concurrent.Executors提供了一个 java.util.concurrent.Executor接口的实现用于创建线程池
  2.1:newSingleThreadExecutor
    单个线程的线程池,即线程池中每次只有一个线程工作,单线程串行执行任务
  2.2:newFixedThreadExecutor(n)
    固定数量的线程池,没提交一个任务就是一个线程,直到达到线程池的最大数量,然后后面进入等待队列直到前面的任务完成才继续执行
  2.3:newCacheThreadExecutor(推荐使用)
    可缓存线程池,当线程池大小超过了处理任务所需的线程,那么就会回收部分空闲(一般是60秒无执行)的线程,当有任务来时,又智能的添加新线程来执行。
  2.4:newScheduleThreadExecutor
    大小无限制的线程池,支持定时和周期性的执行线程

 

参考链接: 线程池和连接池原理:https://www.cnblogs.com/qianjinyan/p/10250087.html;
参考链接: 池:https://www.cnblogs.com/whb11/p/11315463.html;
参考链接: 线程池和连接池:https://blog.csdn.net/sinat_39634657/article/details/81003669;
参考链接: 连接池详解:https://blog.csdn.net/fangquan1980/article/details/52429903;
参考链接: JDBC:https://www.cnblogs.com/qzhc/p/11190942.html;
参考链接: 常见连接池区别:https://cloud.tencent.com/developer/article/1446874;

 

posted @ 2021-02-18 22:20  对月当歌  阅读(834)  评论(0)    收藏  举报