池化思想:字符串常量池,线程池,数据库连接池

本文深入探讨了线程池的概念,强调其在资源管理中的优势,如提高线程利用率和响应速度,并通过银行柜台的比喻解释了线程池的工作原理。同时,介绍了数据库连接池的重要性和优点,如资源重用和系统反应速度的提升,并列举了多个知名的数据库连接池实现,如DBCP、C3P0和Druid。文章还提及了线程池的创建和配置,以及其在程序中的应用方式。
摘要由CSDN通过智能技术生成

池化思想

资源反复利用,用后归还,免去大量建立销毁浪费的时间和资源,建立和销毁占用的资源还是很多的

字符串常量池

常量池独立于栈和堆,以下两种创建方式区别

1,直接保存常量池的内容
String s1 = “直接保存”

2,new String间接保存
String s2 = new String(“间接保存”)

区别:

  • 直接保存,无论创建多少个都是相同的
  • 间接保存实际上保存的是地址值,指向线程池,此方式会产生两个对象;如果多次间接保存,例如:
    String s3 = new String(“间接保存”)
    String s4 = new String(“间接保存”)
    String s5 = new String(“间接保存”)

实际上在常量池中只创建了一个"间接保存"的对象,而引用对象却创建了3次

线程池

与传统相比的优点

  • 传统的线程实现方式有包含了线程创建 线程销毁 的时间,而线程是可以复用的,因此引入线程池,把线程创建和销毁 改为 用后归还,不销毁,重复利用资源,提高线程利用率,提高程序的响应速度
  • 便于统一管理线程对象
  • 可以控制最大并发量

线程池模型——银行

柜台窗口:线程,且不销毁
等待区:等待队列
窗口不够用时:增加线程
等待区没有座位时:拒绝策略——报异常或交给某个线程去左
窗口空闲太多:减少线程

线程池创建

JUC并发工具包提供了ThreadPoolExecutor创建线程池,ThreadPoolExecutor有8个参数,分别为:

  • corePoolSize:核心线程数——永不关闭的柜台窗口数
  • maximumPoolSize:最大线程数——最多的窗口总数
  • keepAliveTime:线程存活时间——非核心线程过多长时间没有接到任务就销毁——需要设置单位unit
  • unit:TimeUnit.SECONDS 或TimeUnit.MICROSECONDS等等都可以
  • BlockingQueue :等待队列,new ArrayBlockingQueue<>(capacity:10)这里capacity的值设为10
  • ThreadFactory:线程工厂——无需自己创建,直接调用Executors.defaultThreadFactory()
  • RejectedExecutionHandler:拒绝策略——new ThreadPoolExecutor.AbortPolicy()被拒绝的任务的处理程序,抛出一个 RejectedExecutionException

创建好之后用ExecutorService类对象来接收,之后就可以直接调用了
例如:利用lambda表达式

for(){
executorService.execute( ()->{ 线程业务逻辑 } );
}//线程池会自动调整当前线程数
executorService.shutdown();//关闭线程池

参考:
拒绝策略实现步骤

线程池详解

数据库连接池

优点

  • 资源重用
  • 更快的系统反应速度
  • 新的资源分配手段
  • 统一的连接管理,避免数据库连接泄漏

参考1

参考2

优秀的开源数据库连接池代理

(1)DBCP 是Apache提供的数据库连接池。tomcat服务器自带dbcp数据库连接池。速度相对c3p0较快,但因自身存在BUG,Hibernate3已不再提供支持。

(2)C3P0 是一个开源组织提供的一个数据库连接池,速度相对较慢,稳定性还可以,hibernate官方推荐使用。

(3)Proxool 是sourceforge下的一个开源项目数据库连接池,有监控连接池状态的功能,稳定性较c3p0差一点.

(4)BoneCP 是一个开源组织提供的数据库连接池,速度快。

(5)Druid 是阿里提供的数据库连接池,据说是集DBCP 、C3P0 、Proxool优点于一身的数据库连接池,但是速度不确定是否有BoneCP快。

还有锁池,等待池

具体在线程同步的汇总中,wait和notify

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值