`
jiangnan2112
  • 浏览: 122676 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

java对象池技术

阅读更多
以下是项目中的代码的简化版,看看达人们的看法,各位达人有好的代码可以上传一下。不是提问帖哟,不要移动提问中去了。不过common-pool包中的对象池技术比较全面。

package com.test;

public class Client {

	private static Client client;

	private Client() {
	}

	public static Client getClient(Client client) {
		if (client == null) {
			client = new Client();
		}
		return client;
	}

}



package com.test;



/**
 * @copyright 
 * 类说明: 工厂
 * @author 
 * @version 创建时间:2011-4-8
 */

public class ClientFactory {

	private static ClientPool clientPool;
	
	private ClientFactory(){}
	
	public  static ClientPool getClientInstance(){
		if(clientPool == null){
			clientPool = new ClientPool(5,8);
		}
		return clientPool;
	}
}




package com.test;

import java.util.ArrayList;



/**
 * 类说明: 池
 * @version 创建时间:2011-4-8
 */

public class ClientPool {

	private Client client=null;
	private int inUsed=0;     //使用的连接数
	private ArrayList<Client> freeConnections = new ArrayList<Client>();//容器,空闲连接
	private int minConn;      //最小连接数
	private int maxConn;      //最大连接
	
	public ClientPool() {

	}

	public ClientPool(int minConn, int maxConn) {
		this.minConn = minConn;
		this.maxConn = maxConn;
	}
	
	/**
	   * 用完,释放连接
	   * @param con
	   */
	public synchronized void freeConnection(Client client)
	{
		add(false);
		if(client!=null){
		   this.freeConnections.add(client);//添加到空闲连接的末尾
		   System.out.println("释放连接,现有" + inUsed + "个连接在使用!");
		}
		
		if(this.inUsed==0 && this.freeConnections.size()>this.minConn){
			for(int i=this.freeConnections.size()-this.minConn; i>0; i--){
				client = (Client) this.freeConnections.get(0);
				this.freeConnections.remove(0);//如果连接分配出去了,就从空闲连接里删除		
				System.out.println("释放连接池到最小连接"+this.minConn+",现有" + inUsed + "个连接在使用,连接池数"+this.freeConnections.size()+" !");
			}
		}
	}

	/**
	   *
	   * 从连接池里得到连接
	   * @return
	   */
	public synchronized Client getConnection() {
		Client cl = null;
		//不能超过最大连接。
		if(this.maxConn > this.inUsed){
			if (this.freeConnections.size() > 0) {
				cl = (Client) this.freeConnections.get(0);
				this.freeConnections.remove(0);//如果连接分配出去了,就从空闲连接里删除
				if (cl == null)
					cl = getNextConnection(); //继续获得连接
			} else {
				cl = Client.getClient(cl); //新建连接
			}
		}else{
			System.out.println("达到最大连接数"+maxConn+",现有" + inUsed + "个连接在使用!");
		}
		if (cl != null) {
			add(true);
			System.out.println("得到连接,现有" + inUsed + "个连接在使用!");
		}
		return cl;
	}
	
	
	private Client getNextConnection() {
		if (this.freeConnections.size() > 0) {
			client = (Client) this.freeConnections.get(0);
			this.freeConnections.remove(0);//如果连接分配出去了,就从空闲连接里删除
			if (client == null)
				client = getNextConnection(); //继续获得连接
		} else {
			client = Client.getClient(client); //新建连接
		}
		
		return client;
	}
	
	private synchronized void add(boolean add){
		if(add)
			this.inUsed++;
		else if(this.inUsed>0)
			this.inUsed--;
	}


}




package com.test;
/**
 * @copyright 
 * 类说明:
 * @author 
 * @version 创建时间:2011-4-8
 */

public class Test {

	public static void main(String[] args) {

		Client clinet1 = ClientFactory.getClientInstance().getConnection();
		Client clinet2 = ClientFactory.getClientInstance().getConnection();
		Client clinet3 = ClientFactory.getClientInstance().getConnection();
		Client clinet4 = ClientFactory.getClientInstance().getConnection();
		Client clinet5 = ClientFactory.getClientInstance().getConnection();
		Client clinet6 = ClientFactory.getClientInstance().getConnection();
		
		ClientFactory.getClientInstance().freeConnection(clinet4);
		
		Client clinet7 = ClientFactory.getClientInstance().getConnection();
		Client clinet8 = ClientFactory.getClientInstance().getConnection();
		Client clinet9 = ClientFactory.getClientInstance().getConnection();
		Client clinet10 = ClientFactory.getClientInstance().getConnection();
		
		System.out.println(clinet1);
		System.out.println(clinet2);
		System.out.println(clinet3);
		System.out.println(clinet4);
		System.out.println(clinet5);
		System.out.println(clinet6);
		System.out.println(clinet7);
		System.out.println(clinet8);
		System.out.println(clinet9);
		System.out.println(clinet10);
	}
}


分享到:
评论

相关推荐

    Java对象池技术的原理及其实现

    ### Java对象池技术的原理及其实现 #### 摘要 本文深入探讨了Java对象池技术的基本原理及其实现方式,旨在帮助读者理解如何利用对象池优化Java应用程序的性能。通过对对象池技术核心概念——缓存与共享的阐述,本文...

    Java对象池技术的原理

    ### Java对象池技术的原理 在Java开发领域中,对象池技术是一种常用的设计模式,用于管理可重用的对象集合,从而提高系统性能并减少资源消耗。本文将详细探讨Java对象池技术的基本原理及其具体实现方式。 #### ...

    Java对象池实现源码

    总结来说,Java对象池是一种优化技术,通过复用对象减少创建和销毁的成本。我们可以借鉴Jakarta Commons Pool的设计思路,实现自己的轻量级对象池,满足特定场景的需求。理解并熟练运用对象池,对于提升Java应用的...

    关于java对象池的例子代码

    Java对象池是一种优化资源管理的技术,它通过复用已经创建并初始化过的对象,避免了频繁地创建和销毁对象带来的性能开销。在Java中,对象池通常用于数据库连接、线程、Socket等昂贵资源的管理。下面我们将深入探讨...

    java对象池化技术

    用于充当保存对象的“容器”的对象,被称为“对象池”(Object Pool,或简称 Pool)。 对象池化的优缺 对象池化技术可以减少对象生成和初始化时的消耗,提高系统的运行效率。但是,并非所有对象都适合拿来池化――...

    基于Java的对象池管理系统.zip

    本项目是一个基于Java的对象池管理系统,旨在通过对象池技术减少频繁创建和销毁对象所带来的开销,从而提高系统性能和资源利用率。对象池技术允许在需要时从池中获取已存在的对象,而不是每次都创建新对象,使用完毕...

    java对象池化技术[参照].pdf

    Java对象池化技术是一种优化程序性能的策略,它通过预先创建一组对象并保留它们,以便在需要时重复使用,而不是每次需要时都创建新的对象。这样可以显著减少对象的创建和初始化时间,尤其适用于那些创建成本较高的...

    Java--pool-technology.rar_theory

    Java对象池技术是一种优化资源管理的方法,主要用于减少创建和销毁对象的开销,尤其是在频繁创建和销毁对象的应用场景中。其基本思想是预先创建并维护一组可重用的对象,当程序需要一个对象时,可以从池中获取,而...

    高效的,固定大小的对象池

    在计算机科学和编程领域...综上所述,一个高效的固定大小对象池是通过预先分配并管理一组对象来提升性能的内存管理技术。其核心在于优化内存分配和对象复用,以减少系统开销,尤其适用于需要频繁创建和销毁对象的场景。

    工厂设计模式附加对象池说明

    对象池是一种资源管理技术,用于预先创建一组对象并存储在一个“池”中,当需要对象时,可以从池中获取,而不是每次需要时都创建新的对象。这样可以显著减少对象的创建和销毁开销,尤其是在创建对象成本高或者系统...

    对象池&线程池&数据库连接池

    在Java中,`java.util.concurrent`包下的`ObjectPool`接口就是用于定义对象池的行为。通过对象池,可以避免频繁的实例化和垃圾回收,提高程序运行速度。例如,JDBC的`Statement`和`PreparedStatement`对象池,可以...

    基于java的对象池实现.zip

    通过上述步骤,我们已经实现了一个基本的Java对象池。然而,这只是一个简化的示例,实际应用中可能需要考虑更多的因素,如对象的公平分配、超时回收、对象状态检查等。例如,Apache Commons Pool2库提供了一套完整的...

    对象池

    对象池是一种在软件设计中常见的优化技术,主要目的是提高程序性能和减少系统资源的消耗。在Java编程中,对象池通常用于管理那些创建和销毁成本较高的对象,通过...理解并熟练应用对象池技术对于提升系统性能至关重要。

    java连接池实例.doc

    因此,为了提高应用程序的效率和响应速度,通常会采用数据库连接池技术。连接池在应用程序启动时创建一定数量的数据库连接,并将其保存在一个池中,当应用程序需要访问数据库时,可以直接从连接池中获取一个已存在的...

    Java的动态代理、反射机制和数据库连接池技术

    数据库连接池技术,如HikariCP、C3P0、Druid等,是提高应用程序性能和效率的重要手段。连接池预先创建并维护一定数量的数据库连接,当应用需要时可以从池中获取,使用完毕后归还。这样避免了频繁创建和销毁连接的...

    Java jdbc数据库连接池总结

    Java JDBC 数据库连接池...Java JDBC 数据库连接池技术可以解决频繁的数据库连接操作对系统资源的占用,提高系统的性能和可靠性。同时,连接池技术也可以和其它技术结合使用,例如 EJB 技术,实现高效的数据库访问。

    apache对象池的实现

    Apache对象池技术是一种高效利用资源的策略,它通过预先创建并维护一组可重用对象来减少频繁创建和销毁对象带来的开销。在Java环境中,Apache Commons Pool库是实现对象池的常见工具,它提供了多种对象池实现,适用...

    对象池工厂(微型IOC容器)

    对象池是一种优化技术,用于管理对特定类型对象的创建和复用,以提高性能,减少系统资源的消耗。它通过维护一个对象集合来避免频繁地创建和销毁对象,特别是对于那些创建和初始化成本较高的对象。 在描述中提到的...

    Java 连接池实现

    2. **连接池**:连接池是一个对象池,存储已创建的数据库连接。应用程序在需要时从池中获取连接,使用完毕后归还,而不是直接关闭。这样可以减少创建和销毁连接的次数,提高系统性能。 3. **配置文件**:在手动实现...

Global site tag (gtag.js) - Google Analytics