几种Java数据库连接池实现(三)<2>

ackage pool;

//连接池调度线程
public class FactoryMangeThread implements Runnable {
    ConnectionFactory cf = null;

    long delay = 1000;

    public FactoryMangeThread(ConnectionFactory obj) {
        cf = obj;
    }

    /*
    * (non-Javadoc)
    *
    * @see java.lang.Runnable#run()
    *
    */
    public void run() {
        while (true) {
            try {
                Thread.sleep(delay);
            } catch (InterruptedException e) {
            }
            System.out.println("eeeee");
            // 判断是否已经关闭了工厂,那就退出监听
            if (cf.isCreate())
                cf.schedule();
            else
                System.exit(1);
        }
    }
}



package pool;

//连接池工厂参数
public class FactoryParam {
    // 最大连接数
    private int MaxConnectionCount = 4;

    // 最小连接数
    private int MinConnectionCount = 2;

    // 回收策略
    private int ManageType = 0;

    public FactoryParam() {
    }

    /**
    *
    * 构造连接池工厂参数的对象
    *
    * @param max
    *            最大连接数
    *
    * @param min
    *            最小连接数
    *
    * @param type
    *            管理策略
    *
    */
    public FactoryParam(int max, int min, int type) {
        this.ManageType = type;
        this.MaxConnectionCount = max;
        this.MinConnectionCount = min;
    }

    /**
    *
    * 设置最大的连接数
    *
    * @param value
    *
    */
    public void setMaxConn(int value) {
        this.MaxConnectionCount = value;
    }

    /**
    *
    * 获取最大连接数
    *
    * @return
    *
    */
    public int getMaxConn() {
        return this.MaxConnectionCount;
    }

    /**
    *
    * 设置最小连接数
    *
    * @param value
    *
    */
    public void setMinConn(int value) {
        this.MinConnectionCount = value;
    }

    /**
    *
    * 获取最小连接数
    *
    * @return
    *
    */
    public int getMinConn() {
        return this.MinConnectionCount;
    }

    public int getType() {
        return this.ManageType;
    }
}


===
package pool;

import java.sql.*;

public class testmypool {
    public void test1() {
        String user = "DevTeam";
        String password = "DevTeam";
        String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
        String url = "jdbc:odbc:gfqh2";
        ConnectionParam param = new ConnectionParam(driver, url, user, password);
        ConnectionFactory cf = null;// new ConnectionFactory(param, new
        // FactoryParam());
        try {
            cf = new ConnectionFactory(param, new FactoryParam());
            Connection conn1 = cf.getFreeConnection();
            Connection conn2 = cf.getFreeConnection();
            Connection conn3 = cf.getFreeConnection();
            Statement stmt = conn1.createStatement();
            ResultSet rs = stmt.executeQuery("select * from requests");
            if (rs.next()) {
                System.out.println("conn1 y");
            } else {
                System.out.println("conn1 n");
            }
            stmt.close();
            conn1.close();
            Connection conn4 = cf.getFreeConnection();
            Connection conn5 = cf.getFreeConnection();
            stmt = conn5.createStatement();
            rs = stmt.executeQuery("select * from requests");
            if (rs.next()) {
                System.out.println("conn5 y");
            } else {
                System.out.println("conn5 n");
            }
            conn2.close();
            conn3.close();
            conn4.close();
            conn5.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                cf.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        String user = "DevTeam";
        String password = "DevTeam";
        String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
        String url = "jdbc:odbc:gfqh2";
        ConnectionParam param = new ConnectionParam(driver, url, user, password);
        ConnectionFactory cf = null;
        // new ConnectionFactory(param,new FactoryParam());
        try {
            cf = new ConnectionFactory(param, new FactoryParam());
            // ConnectionFactory cf1 = new ConnectionFactory(param,new
            // FactoryParam());
            Connection conn1 = null;
            long time = System.currentTimeMillis();
            for (int i = 0; i < 10; i++) {
                conn1 = cf.getFreeConnection();
                Statement stmt = conn1.createStatement();
                ResultSet rs = stmt.executeQuery("select * from requests");
                if (rs.next()) {
                    System.out.println("conn1 y");
                } else {
                    System.out.println("conn1 n");
                }
                conn1.close();
            }
            System.out.println("pool:" + (System.currentTimeMillis() - time));
            time = System.currentTimeMillis();
            Class.forName(param.getDriver()).newInstance();
            for (int i = 0; i < 10; i++) {
                conn1 = DriverManager.getConnection(param.getUrl(), param
                        .getUser(), param.getPassword());
                Statement stmt = conn1.createStatement();
                ResultSet rs = stmt.executeQuery("select * from requests");
                if (rs.next()) {
                    System.out.println("conn1 y");
                } else {
                    System.out.println("conn1 n");
                }
                conn1.close();
            }
            System.out
                    .println("no pool:" + (System.currentTimeMillis() - time));
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                cf.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

猜你喜欢

转载自wush121.iteye.com/blog/1489103