博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自定义连接池
阅读量:4981 次
发布时间:2019-06-12

本文共 2663 字,大约阅读时间需要 8 分钟。

 

package com.loaderman.demo.b_pool;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.util.LinkedList;/** * 自定义连接池, 管理连接 * 代码实现: 1.  MyPool.java  连接池类, 2.  指定全局参数:  初始化数目、最大连接数、当前连接、   连接池集合 3.  构造函数:循环创建3个连接 4.  写一个创建连接的方法 5.  获取连接 ------>  判断: 池中有连接, 直接拿 ------>                池中没有连接, ------>                 判断,是否达到最大连接数; 达到,抛出异常;没有达到最大连接数, 创建新的连接 6. 释放连接 ------->  连接放回集合中(..) * */public class MyPool {    private int init_count = 3;        // 初始化连接数目    private int max_count = 6;        // 最大连接数    private int current_count = 0;  // 记录当前使用连接数    // 连接池 (存放所有的初始化连接)    private LinkedList
pool = new LinkedList
(); //1. 构造函数中,初始化连接放入连接池 public MyPool() { // 初始化连接 for (int i=0; i
0){ return pool.removeFirst(); } // 3.2 连接池中没有连接: 判断,如果没有达到最大连接数,创建; if (current_count < max_count) { // 记录当前使用的连接数 current_count++; // 创建连接 return createConnection(); } // 3.3 如果当前已经达到最大连接数,抛出异常 throw new RuntimeException("当前连接已经达到最大连接数目 !"); } //4. 释放连接 public void realeaseConnection(Connection con) { // 4.1 判断: 池的数目如果小于初始化连接,就放入池中 if (pool.size() < init_count){ pool.addLast(con); } else { try { // 4.2 关闭 current_count--; con.close(); } catch (SQLException e) { throw new RuntimeException(e); } } } public static void main(String[] args) throws SQLException { MyPool pool = new MyPool(); System.out.println("当前连接: " + pool.current_count); // 3 // 使用连接 pool.getConnection(); pool.getConnection(); Connection con4 = pool.getConnection(); Connection con3 = pool.getConnection(); Connection con2 = pool.getConnection(); Connection con1 = pool.getConnection(); // 释放连接, 连接放回连接池// pool.realeaseConnection(con1); /* * 希望:当关闭连接的时候,要把连接放入连接池!【当调用Connection接口的close方法时候,希望触发pool.addLast(con);操作】 * 把连接放入连接池 * 解决1:实现Connection接口,重写close方法 * 解决2:动态代理 */ con1.close(); // 再获取 pool.getConnection(); System.out.println("连接池:" + pool.pool.size()); // 0 System.out.println("当前连接: " + pool.current_count); // 3 }}

 

转载于:https://www.cnblogs.com/loaderman/p/10018700.html

你可能感兴趣的文章
作业3
查看>>
Floyd算法解说
查看>>
CSS3:box-sizing:不再为盒子模型而烦恼
查看>>
java基础之【堆、栈、方法区】结构图
查看>>
Node.js查找可用端口
查看>>
thinkphp前台模版字符串截取
查看>>
java基本知识和初级使用
查看>>
3.26第五次Android作业,任务T2的总结。
查看>>
HTML5中的Blob对象的使用
查看>>
欧拉计划之题目2:在斐波那契数列中,找出4百万以下的项中值为偶数的项之和。...
查看>>
python读取excle表格_xlrd模块
查看>>
Beautifulsoup分解
查看>>
浅谈C++非多态单继承数据布局
查看>>
cogs 1396. wwww
查看>>
MYSQL数据库优化
查看>>
Linux 新手学习任务
查看>>
内部类对象的获取!《Thinking in Java》随笔018
查看>>
[MongoDB]Python 操作 MongoDB
查看>>
Django+xadmin打造在线教育平台(三)
查看>>
C# 颜色有3种表示方式: 6位16进制、RGB、 颜色关键字
查看>>