池化思想对于 JAVA 是意义非凡的,因为其避免了很多的创建开销。
线程资源,数据库连接资源,TCP连接等,这些对象的初始化,通常是要花费较长时间的,如果我们频繁的进行申请和销毁,就会消耗大量的系统资源,进而对性能造成影像。于此同时这些对象又有一个共性的特征,就是如果他们是可以池化的,通过创建一个虚拟的池,将这些资源预存起来,当我们需要的时候,从中按需获取,就可以了。
先从数据库连接池讲起吧,其基本思路就是在系统初始化的时候,就把数据库连接作为对象储存起来,放在内存中,当用户需要在访问数据库的时候,我们不创建新的连接,而是从连接池汇中获取一个已经创建好的空闲的连接对象。在使用完后,也不关闭,物归原主,依旧放进连接池,以供之后使用。这些连接的行为都由连接池来管理。任务池的管理就需要我们通过参数来调整了。通常连接池中的初始连接数,连接上限,连接下限,连接的最大使用次数,最大空闲时间这些参数是需要我们关注的,也能用连接池自身的管理机制来进行监视。
**最小数据库连接数(连接下限)** :无论数据库是否被使用,都保持至少有这个数量的连接数量
**最大数据库连接数(连接上限)** :连接池能占有的最大连接数,当请求的连接数超过最大数量时,请求就放进等待队列。
**最大等待时间**:当没有可用连接时,连接池等待连接被归还的最大事件,超时就异常。
//
ComboPooledDataSource dataSource = new ComboPooledDataSource();
//1.1 设置基本项
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql://localhost:8080/...");
dataSource.setUser("");
dataSource.setPassword("");
//1.2其他项
// \* 初始化连接池中连接的个数
dataSource.setInitialPoolSize(5);
// \* 最小|最大连接池中连接的个数
dataSource.setMinPoolSize(2);
dataSource.setMaxPoolSize(10);
// \* 最大空闲数
dataSource.setMaxIdleTime(60);
// \* 每次增长个数
dataSource.setAcquireIncrement(2);
//2获得连接
Connectionconn = dataSource.getConnection();
System.out.println(conn);
线程池 对象池 下次再聊
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。