首页 > 代码库 > 线程池

线程池

    一】原理
    ·传统的:
        1)JDBC传统方式找DriverMannager要连接,而这个连接的数目是有限的。
        2)传统方式的close(),并未将Connection重用,只是切断应用程序和数据库的桥梁,即无SQL语句发送到数据库。
        3)项目中,对于Connection不会直接使用DriverMannager取得,而使用连接池方式取得。
        4)DBCP和C3P0都是开源的连接池,都必须直接或间接实现javax.sql.DataSource接口
    ·连接池
        1)示意图
        
        2)开源的连接池
                    DBCP数据库连接池(tomcat)
                    C3P0数据库连接池(hibernate)
                    
    二】DBCP连接池(tomcat):需要利用Properties属性文件进行配置
        重点类:
            1)BasicDataSourceFactory //连接池工厂
                重点方法:
                static DataSource createDataSource(Properties properties);//创建一个连接池
            2)DataSource
                Conncetion getConncetion();
        code:
            //配置文件:

                driverClassName=com.mysql.jdbc.Driver                url=jdbc:mysql://127.0.0.1:3306/jdbc                username=root                password=root        

          

    //JavaCode

              // 创建一个线程池工厂                BasicDataSourceFactory factory = new         BasicDataSourceFactory();                // 加载properties配置文件                Properties prop = new Properties();                InputStream is = Thread.currentThread().getClass()                        .getResourceAsStream("/dbcp.properties");                prop.load(is);                DataSource dataSource = factory.createDataSource(prop);                long start = System.currentTimeMillis();                for (int i = 1; i <= 50000; i++) {                    //从连接池中取得一个连接                    Connection conn = dataSource.getConnection();                    System.out.println(i + " :个连接");                    //释放一个连接给连接池                    conn.close();                }                long end = System.currentTimeMillis();                System.out.println("共用了"+ (end-start)/1000 +"秒");        

 


       
    三】C3P0连接池(hibernate):Connectin和"Statement族类"都重用了!!! 需要配置XML文件
        1)重点类:
            ComboPooledDataSource //创建C3P0连接池的关键类
            重点方法:
                Connection getConnection();//得到一个C3P0连接池中的连接
        code:
            配置文件:

       //c3p0-config.xml  【!名字不能乱取!并且一定要放到src目录下,即编译后的项目的/WEB-INF/classes目录下】            <?xml version="1.0" encoding="UTF-8"?>            <c3p0-config>                <default-config>                    <property name="driverClass">com.mysql.jdbc.Driver</property>                    <property name="user">root</property>                    <property name="password">568231252</property>                    <property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/jdbc</property>                </default-config>            </c3p0-config>

 

 

      //JavaCode

            //Demo.java            ComboPooledDataSource dataSource = new ComboPooledDataSource();            long start = System.currentTimeMillis();            for (int i = 1; i <= 50000; i++) {                Connection conn = dataSource.getConnection();                System.out.println(i + " :个连接");                conn.close();            }            long end = System.currentTimeMillis();            System.out.println("共用了" + (end - start) / 1000 + "秒");


    四】DBCP连接池和C3P0连接池对比
        1)DBCP连接池需要dbcp.properties文件,同时需要添加3个对应的jar包
        2)C3P0连接池需要在/WEB-INF/classes目录下(IDE即为src下)存放存放c3p0-config.xml文件,并且名字不能改
        3)ComboPooledDatasource在创建时会自动在指定的目录下找xml文件,并加载默认设置

线程池