- 浏览: 52543 次
文章分类
- 全部博客 (87)
- 模糊查询 (1)
- 树查询 (1)
- 汉字文件编码 (1)
- 图片文件写入网页 (1)
- 网络爬虫 (1)
- 正则表达式实现IP排序 (1)
- javax读取xml (1)
- javax增删改查xml (1)
- java反射 (1)
- dom4j操作XML文件 (1)
- descode函数 (1)
- 用户在线管理 (1)
- oracle统计函数统计各个年份入职的人数 (1)
- js解绑时间和自定义时间 (1)
- extjs 树控件开发 (1)
- java导出excel (1)
- java导入excel... (1)
- 行转列 (1)
- 连接池 (1)
- oracle plsql (0)
- oracle (1)
- oracle存储过程 (5)
- plsql编程 (5)
- oracle触发器 (2)
- oracle知识 (1)
- web技术 (22)
- servle+jspt文件下载 (0)
- wen技术 (0)
- java连接池 (1)
- java基础 (10)
- weblogic (3)
- jstl标签库的使用 实例 (1)
- css技术 (1)
- 存储过程 (1)
- sql统计 (1)
- webservice技术 (5)
- spring框架总结 (1)
- mongoDB (1)
- 64位oracle安装plsql (1)
- mongoDB分组统计 (1)
- ssh 无密码登录 (0)
- mysql (1)
- hadoop (0)
- lucene (1)
最新评论
1.数据可连接配置文件 jdbc配置文件
driver:oracle.jdbc.driver.OracleDriver
path:jdbc:oracle:thin:@127.0.0.1:1521:ORCL
countSize:3
user:scott
password:tiger
2.线程类
package com.cgm.util;
import java.sql.Connection;
import java.sql.Statement;
public class MyThread extends Thread{
@Override
public void run() {
Connection conn=null;
try {
conn=Conutils.getCon(); //取得链接
System.err.println(this.getName()+","+conn);
conn.setAutoCommit(false);//设置失去的开始
String sql=" insert into userss values('"+this.getName()+"','Tom','49')";
Statement st=conn.createStatement();
st.execute(sql);
conn.commit();
System.out.println(this.getName()+"子线程执行完成");
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
conn.setAutoCommit(true);
conn.close(); //close变成了还链接
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}
3代理类
package com.cgm.threadpool;
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.util.ArrayList;
import java.util.List;
public class ConUtils1 {
private static List<Connection> pool=new ArrayList<Connection>();
static{
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
String url="jdbc:oracle:thin:@127.0.0.1:1521:ORCL";
String user="scott";
String passWord="tiger";
for (int i = 0; i < 3; i++) {
final Connection conn= DriverManager.getConnection(url, user, passWord);
//产生被代理对象对conn进行代理
Object connObj=Proxy.newProxyInstance(
ConUtils1.class.getClassLoader(),
new Class[]{Connection.class},
new InvocationHandler() {
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
//method.getName()拦截目标类别的所有方法
if (method.getName().equals("close")) {
System.out.println("不能关啊,还要链接");
}else{
System.out.println(method.getName());
return method.invoke(conn, args);
}
synchronized (pool) {
//这个peoxy就是 connObj
pool.add((Connection) proxy);
//加进去了就放行
pool.notify();
}
return null;
}
});
pool.add((Connection) connObj); //加被代理对象能拦截啊,只能拦截代理对象
}
} catch (Exception e) {
throw new RuntimeException();
}
}
/*
* 提供一个静态工厂方法 返回一个链接
*/
public static Connection getCon(){
synchronized (pool) {
if (pool.size()==0) { //发现没有----等待
try {
//Thread.sleep(1000);
pool.wait(); //没有就等待
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return getCon(); //递归 直到拿到为止
}
Connection conn=pool.remove(0); //返回一个代理的Connection类
return conn;
}
}
}
4.测试类
package com.cgm.util;
public class ThreadDemo {
public static void main(String[] args) throws Exception {
for (int i = 0; i < 30; i++) {
new MyThread().start();
}
}
}
driver:oracle.jdbc.driver.OracleDriver
path:jdbc:oracle:thin:@127.0.0.1:1521:ORCL
countSize:3
user:scott
password:tiger
2.线程类
package com.cgm.util;
import java.sql.Connection;
import java.sql.Statement;
public class MyThread extends Thread{
@Override
public void run() {
Connection conn=null;
try {
conn=Conutils.getCon(); //取得链接
System.err.println(this.getName()+","+conn);
conn.setAutoCommit(false);//设置失去的开始
String sql=" insert into userss values('"+this.getName()+"','Tom','49')";
Statement st=conn.createStatement();
st.execute(sql);
conn.commit();
System.out.println(this.getName()+"子线程执行完成");
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
conn.setAutoCommit(true);
conn.close(); //close变成了还链接
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}
3代理类
package com.cgm.threadpool;
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.util.ArrayList;
import java.util.List;
public class ConUtils1 {
private static List<Connection> pool=new ArrayList<Connection>();
static{
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
String url="jdbc:oracle:thin:@127.0.0.1:1521:ORCL";
String user="scott";
String passWord="tiger";
for (int i = 0; i < 3; i++) {
final Connection conn= DriverManager.getConnection(url, user, passWord);
//产生被代理对象对conn进行代理
Object connObj=Proxy.newProxyInstance(
ConUtils1.class.getClassLoader(),
new Class[]{Connection.class},
new InvocationHandler() {
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
//method.getName()拦截目标类别的所有方法
if (method.getName().equals("close")) {
System.out.println("不能关啊,还要链接");
}else{
System.out.println(method.getName());
return method.invoke(conn, args);
}
synchronized (pool) {
//这个peoxy就是 connObj
pool.add((Connection) proxy);
//加进去了就放行
pool.notify();
}
return null;
}
});
pool.add((Connection) connObj); //加被代理对象能拦截啊,只能拦截代理对象
}
} catch (Exception e) {
throw new RuntimeException();
}
}
/*
* 提供一个静态工厂方法 返回一个链接
*/
public static Connection getCon(){
synchronized (pool) {
if (pool.size()==0) { //发现没有----等待
try {
//Thread.sleep(1000);
pool.wait(); //没有就等待
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return getCon(); //递归 直到拿到为止
}
Connection conn=pool.remove(0); //返回一个代理的Connection类
return conn;
}
}
}
4.测试类
package com.cgm.util;
public class ThreadDemo {
public static void main(String[] args) throws Exception {
for (int i = 0; i < 30; i++) {
new MyThread().start();
}
}
}
发表评论
-
往泛型的集合里添加数据
2014-07-17 23:26 742package com.cgm.callback; impo ... -
初识回调函数
2014-07-17 23:14 543package com.cgm.callback; publ ... -
元数据分析以及导入数据库表中所有的数据到excel
2014-07-17 15:58 353package com.cgm.util; import j ... -
threadlocal的基本实现
2014-07-13 13:44 416package com.cgm.threadlocal; i ... -
java数据库连接池通过动态代理和线程通讯实现
2014-07-09 23:52 4361.代理类 package com.cgm.threadpo ... -
list代理对象测试
2014-07-09 21:30 364package com.cgm.invokelist; im ... -
java动态代理的基本实现
2014-07-08 23:45 3331 目标类接口 package com.cgm.invokec ... -
关于jvm的三个类加载器以及jar包的生成
2014-07-08 22:57 616package com.cgm.invokeclass; i ... -
java最简单的反射实例
2014-07-08 21:31 517package com.cgm.invokeclass; ...
相关推荐
数据库连接池用在网站后台架构中,非常有利于提高用户请求的响应速度。为此,我编写了一个...经过上千个多线程同时访问的数据库连接池程序 。 资源包括一个接口,两个实现。一个测试类。 大家可以使用它,修改它。
数据库连接池,是一种相当实用的应用程序。它可以保存、维护及创建用户所需的数据库连接。从而使得用户得到一个连接的时间降低90%以上。大大提升了数据库访问的反应时间。 这个是一个开源的代码。大家可以修改它、...
数据库连接池,是一种相当实用的应用程序。它可以保存、维护及创建用户所需的数据库连接。从而使得用户得到一个连接的时间降低90%以上。大大提升了数据库访问的反应时间。 这个是一个开源的代码。大家可以修改它、...
R2 jdbc连接池,用于java程序中jdbc连接池的配置管理,可应用于非web项目(纯java项目),全参数化配置。 应用时,先用rar打开jar包,拷贝r2.properties文件到class目录,并修改参数。 本包需要用到log4j,请在调用...
Java-JDBC【源码】数据库连接池技术、常规操作与Durid对比、测试(20-200)不同连接数下,10万记录,1万并发,CPU磁盘占用情况 1.数据库连接池 2.Durid介绍(官方文档) 3.编码,问题,常规并发操作 3.1.JDBCUtil....
Java网络编程-多个例子,多线程,连接池,文件传输
NULL 博文链接:https://chensijie88888.iteye.com/blog/829238
v1.3改进了清理线程可能出现的减少连接池中链接而不计数的问题。 v1.2处理了oracle环境下由于服务器关闭休眠链接造成的连接池循环检测进程异常退出的情况,改为当循环周期大于服务器关闭休眠链接间隔时,后台打印...
连接池是解决多线程同时访问是,不必频繁连接数据库用的。
R2 jdbc连接池,用于java程序中jdbc连接池的配置管理,可应用于非web项目(纯java项目),全参数化配置。 应用时,先用rar打开jar包,拷贝r2.properties文件到class目录,并修改参数。 本包需要用到log4j,请在...
本文将详细介绍Spring Boot中如何使用HikariCP作为数据库连接池,包括其工作原理、优势分析、配置步骤以及代码示例。通过本文,读者将能够轻松集成HikariCP到Spring Boot项目中,从而提高数据库连接的性能和效率。 ...
R2 jdbc连接池,用于java程序中jdbc连接池的配置管理,可应用于非web项目(纯java项目),全参数化配置。 应用时,先用rar打开jar包,拷贝r2.properties文件到class目录,并修改参数。 本包需要用到log4j,请在调用...
v1.3改进了清理线程可能出现的减少连接池中链接而不计数的问题。 v1.2处理了oracle环境下由于服务器关闭休眠链接造成的连接池循环检测进程异常退出的情况,改为当循环周期大于服务器关闭休眠链接间隔时,后台打印...
R2 jdbc连接池,用于java程序中jdbc连接池的配置管理,可应用于非web项目(纯java项目),全参数化配置。 应用时,先用rar打开jar包,拷贝r2.properties文件到class目录,并修改参数。 本包需要用到log4j,请在调用...
R2 jdbc连接池,用于java程序中jdbc连接池的配置管理,可应用于非web项目(纯java项目),全参数化配置。 应用时,先用rar打开jar包,拷贝r2.properties文件到class目录,并修改参数。 本包需要用到log4j,请在调用...
主要为大家介绍了java使用influxDB数据库的详细代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Thread概念 Thread实现方法 Thread生命周期 Thread的安全和锁 Concurrent包(安全集合类、安全Queue) 线程阻塞机制 线程池详解(原理,实际使用) 线程的监控,分析方法 扩展数据库连接池
write-jdbc-deom:纯手写数据库连接池,创建多个线程的替换机制
JDBC工具类使用阿里巴巴的数据库连接池Druid,支持高并发,支持多线程环境下的事务和查询测试。
进而从提高访问数据库效率的角度,论述了采用数据库连接池技术、优化SQL语句格式和多线程方法等可提高Java访问数据库效率的方法。 1.概述 在软件开发中通常都会涉及到数据库的应用。而数据库的连接则是数据库...