- 浏览: 55607 次
-
文章分类
- 全部博客 (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 783package com.cgm.callback; impo ... -
初识回调函数
2014-07-17 23:14 580package com.cgm.callback; publ ... -
元数据分析以及导入数据库表中所有的数据到excel
2014-07-17 15:58 379package com.cgm.util; import j ... -
threadlocal的基本实现
2014-07-13 13:44 459package com.cgm.threadlocal; i ... -
java数据库连接池通过动态代理和线程通讯实现
2014-07-09 23:52 4571.代理类 package com.cgm.threadpo ... -
list代理对象测试
2014-07-09 21:30 380package com.cgm.invokelist; im ... -
java动态代理的基本实现
2014-07-08 23:45 3631 目标类接口 package com.cgm.invokec ... -
关于jvm的三个类加载器以及jar包的生成
2014-07-08 22:57 632package com.cgm.invokeclass; i ... -
java最简单的反射实例
2014-07-08 21:31 529package com.cgm.invokeclass; ...
相关推荐
Java数据库连接池是Java开发中一个非常重要的技术,它主要用于管理数据库连接,提高数据库操作的效率和性能。在Java应用程序中,频繁地创建和关闭数据库连接会导致大量的系统资源浪费,而连接池则可以复用已建立的...
Java JDBC 数据库连接池总结 Java 语言中,JDBC(Java DataBase Connection)是应用程序与数据库沟通的桥梁。在 Web 应用开发的早期,主要使用的技术是 CGIASPPHP 等。之后,Sun 公司推出了基于 Java 语言的 ...
本项目提供了一个轻量级的Java数据库连接池实现,旨在简化开发过程,提高应用性能并降低资源消耗。下面将详细介绍这个轻量级Java数据库连接池的设计理念、工作原理以及如何使用。 1. **设计理念** 轻量级数据库...
数据库连接池是Java应用程序中非常重要的一个组件,它在提高应用性能、节省系统资源方面起着关键作用。本文将深入探讨如何使用Java手写数据库连接池,并基于maven进行项目构建。我们将分析四个核心类的功能,以及...
Java数据库连接池(JDBC Connection Pool)是一种管理数据库连接的技术,它可以提高应用程序的性能和效率。连接池在初始化时创建一定数量的数据库连接,并将它们存储起来,当应用程序需要连接时,可以从池中获取,...
数据库连接池是Java开发中非常重要的一个概念,它在处理大量并发访问数据库的应用场景中扮演着关键角色。本文将深入探讨数据库连接池的工作原理、重要性以及如何在Java中实现一个简单的连接池。 首先,数据库连接池...
Java JDBC 数据库连接池总结 Java JDBC 数据库连接池是 Java 应用程序访问数据库的基本原理之一。Java 语言通过 JDBC 技术访问数据库,JDBC 是一种“开放”的方案,为数据库应用开发人员和数据库前台工具开发人员...
数据库连接池的实现通常涉及到多线程、对象池和资源管理等概念。本篇将深入探讨如何利用Java中的动态代理技术来实现一个简单的数据库连接池。 动态代理是Java提供的一种强大特性,主要由`java.lang.reflect.Proxy`...
Java数据库连接池(Java Database Connection Pool)是一种管理数据库连接的技术,它允许应用程序重复使用已建立的数据库连接,而不是每次需要时都创建新的连接。这样做可以显著提高应用性能,减少资源消耗,并提供...
Java JDBC 数据库连接池技术是Java应用程序访问数据库的关键优化手段,尤其在Web应用程序中,它解决了传统JDBC连接方式存在的效率低下和资源浪费问题。Java JDBC(Java Database Connectivity)是Java语言与各种...
### 数据库连接池配置 #### 一、引言 在基于数据库的应用开发中,数据库连接的管理和优化至关重要。本文档详细介绍了MySQL数据库连接池的配置方法及其工作原理,并结合具体的编程场景进行了阐述。 #### 二、传统...
### Java中数据库连接池原理机制详解 #### 一、引言 在现代软件开发中,尤其是在基于Java的应用程序中,数据库连接池技术是一项至关重要的技术。它能够显著提高应用程序访问数据库的效率,减少资源消耗,并简化...
数据库连接池用在网站后台架构中,非常有利于提高用户请求的响应速度。为此,我编写了一个...经过上千个多线程同时访问的数据库连接池程序 。 资源包括一个接口,两个实现。一个测试类。 大家可以使用它,修改它。
Java数据库连接池是一种重要的技术,它在Java应用程序与数据库交互时起到了关键的作用。数据库连接池在多线程、高并发的环境下尤其重要,因为它能够有效地管理和重用数据库连接,从而提高系统性能,减少资源消耗。 ...
2. **数据库连接管理**:在多线程环境下,正确地管理和释放数据库连接至关重要。示例代码中使用了JDBC(Java Database Connectivity)API来建立与Oracle数据库的连接,并通过`DriverManager.getConnection()`方法...
总结,使用Java的动态代理来实现数据库连接池,可以让我们在不改变原有代码的情况下,轻松地添加监控、管理和优化功能。通过拦截数据库连接的打开和关闭操作,我们可以有效地控制资源使用,提升应用性能,同时降低了...
Java数据库连接池(Database Connection Pool)是Java应用程序中用于管理数据库连接的一种技术,它提高了数据库访问的效率,降低了系统的资源消耗。BoneCP是一款轻量级、高性能的Java数据库连接池,设计目标是解决...
数据库连接池是数据库管理中的重要概念,它在Java Web应用中尤其常见,主要用于优化数据库的连接管理和资源利用。自定义数据库连接池是为了更好地适应特定应用的需求,提高数据存取的效率,减少系统开销,避免频繁...
通过以上知识的学习和实践,开发者可以熟练地在Java环境中实现多线程数据互导,高效使用数据库连接池,以及进行多表插入操作,提升系统的并发处理能力和性能。在实际工作中,还需要根据具体需求和场景,灵活运用这些...