- 浏览: 86738 次
- 性别:
- 来自: 苏州
最新评论
-
javazeke:
自己支持一下,,,希望下周有help
求oracle11g和10g 双机热备文档 -
javazeke:
kimmking 写道mr_kairy 写道看你的结构 就是 ...
江湖求方案,类似SSO系统的需求 -
javazeke:
yangdefeng95802 写道LZ的图是什么软件画的?真 ...
江湖求方案,类似SSO系统的需求 -
javazeke:
mr_kairy 写道看你的结构 就是 SOA 解决方案。。 ...
江湖求方案,类似SSO系统的需求 -
javazeke:
threestone1026 写道使用cas了
感谢thre ...
江湖求方案,类似SSO系统的需求
在项目中用到,自己写了个对象池的管理(创建、保留、获取),那种服务器空闲下来再回收的技术。没搞明白是怎么弄得,就没能写出回收部分,还有请求时有队列的管理,我认为这个在并发的程序中用处也不是很大吧,就也没实现。
呵呵,,看下来是不是基本没什么东西啊,,你对了!!!
首先,不管池中放多少,先把单个实例及附属方法弄出来,
单个实例中主要的思想
1.一个栈,这里用stack
2.初始化方法,容器开启的时候可以预先创建池
3.创建实例的方法
4.提供从池中获得对象实例的方法
5.提供返回的方法,不返回后果很严重
6.控制请求等待时间的方法,过了一定的事件还没获得对象实例,就返回一个null指针
import java.util.Stack; @SuppressWarnings("unchecked") public class ObjectPool { public ObjectPool() { } private PoolParam poolParam; public void setPoolParam(PoolParam poolParam) { this.poolParam = poolParam; } // 当前总对象个数 private int currentNum = 0; private Class clazz; public void setClazz(Class clazz) { this.clazz = clazz; } // 栈,用来存放对象,模拟一个池 private Stack stack; public Stack getStack() { return stack; } public void setStack(Stack stack) { this.stack = stack; } // ................................................................. // 等待超时的记数变量 private int timeWait = 0; // ................................................................. // 创建对象池 public void initalPool(PoolParam poolParam, Class clazz) { this.setPoolParam(poolParam); this.setClazz(clazz); stack = new Stack(); stack.clear(); // System.out.println("obj..pool is initial..."); // 生成配置最小对象数,并压入栈中 try { for (int i = 0; i < poolParam.getMinObjectCount(); i++) { // 根据poolParam初始化对象池 stack.push(clazz.newInstance()); } } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } // 创建单个对象 private Object createObj(Class clazz) { Object obj = null; try { obj = clazz.newInstance(); // System.out.println("a new one..."); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } return obj; } // 对象池提供的get方法 public Object getInstance(){ // System.out.println(stack.size()); Object object = null; if (stack.size() == 0) { // 如果当前栈的长度为0,并且总的对象数没有超过定义最大数 if ((currentNum + poolParam.getMinObjectCount()) < poolParam .getMaxObjectCount()) { // 新创建一个对象 object = this.createObj(clazz); // 对象数+1 currentNum++; } else { synchronized (this) { try { waitme(this); } catch (Exception e) { e.printStackTrace(); } // 获得通知后检测栈中是为空,并给出刚刚释放的资源 if (!stack.empty()) { object = stack.pop(); } } } } else if (stack.size() > 0) { object = stack.pop(); // System.out.println(stack.size()); } return object; } // 返回对象的方法 public void returnObj(Object obj) { if (clazz.isInstance(obj)) { stack.push(obj); synchronized (this) { notify(); } } else { System.out.println("this object can not push to stack!"); } } // 等待递归算法 private void waitme(ObjectPool pool) { // 等待2s的技术控制 if (timeWait >= 2000) { System.out.println("jump up this step.."); timeWait = 0; return; } else { try { pool.wait(500); // 等待计数累加。。 timeWait +=1000; System.out.println("waiting time to free obj.."); if (stack.empty()) { System.out.println("agian...."); waitme(pool); } } catch (InterruptedException e) { e.printStackTrace(); } } } }
管理池类,这个不是很难,同步了就好
@SuppressWarnings("unchecked") public class ObjectPoolManage { private ObjectPoolManage() { } private static ObjectPool pool; // 实现一个单例的获取方法....默认 public static synchronized ObjectPool getCacheObject(Class clazz) { if (null != pool) { return pool; } else { createObjectPool(null, clazz); return pool; } } // 实现一个单例的获取方法...自定义 public static synchronized ObjectPool getCacheObject(PoolParam p, Class clazz) { if (null != pool) { return pool; } else { createObjectPool(p, clazz); return pool; } } private static ObjectPool createObjectPool(PoolParam p, Class clazz) { pool = new ObjectPool(); if (null == p) { pool.initalPool(new PoolParam(5,10), clazz); } else { pool.initalPool(p, clazz); } return pool; } private static Class getclazz(){ Class clazz=null; try { clazz= Class.forName(ppp.getPropertyByName("objectPath")); } catch (ClassNotFoundException e) { e.printStackTrace(); } return clazz; } }
这个不是很难吧,和Apache下的那个pool差距很大啊,不过用还是够了。当然了,这里面肯定有不确定的因素会影响到,比如:效率,安全啊,什么的。。。希望大牛看到能为我指出,我感激不及,真的!
发表评论
文章已被作者锁定,不允许评论。
-
求oracle11g和10g 双机热备文档
2010-12-17 22:13 1558项目来了,,需求下来,,怕赔不起,,决定用热备 可怜的我,, ... -
江湖求方案,类似SSO系统的需求
2010-10-16 10:59 1481现有资料,大Boss交代我来弄,说实话,这东东我也不知道怎么 ... -
js array
2010-07-04 11:18 1016zhuan zi http://renxiangzyq.i ... -
Ldap之活动目录之userAccountControl
2010-04-22 10:27 3886When you open the properties fo ... -
Ldap之活动目录之属性
2010-04-22 10:19 1947“常规”标签 姓 Sn 名 Givename ... -
Ldap之活动目录介绍三
2010-04-22 10:12 1244安装第二台域控制器 在安装完第一台域控制器后其域名为 n ... -
Ldap之活动目录介绍二
2010-04-22 10:10 1313运行 Active Directory 安 ... -
Ldap之活动目录介绍一
2010-04-22 09:43 2667最近一直在做java通过Ldap去操作活动目录数据的东东,过程 ... -
我迷茫,我应该怎么走。望各位JE大哥指点!
2010-03-26 09:56 1694小弟六月毕业,在学校还算好学生,从大二起接触编程,,那时的编程 ... -
xp桌面回收站恢复
2010-02-21 19:14 863开始-运行gpedit.msc-本地计算机策略-用户配 ... -
MyEclipse7.5注册机
2010-01-25 17:29 956首先感谢提供源码的那位大牛,我只是做成了exe执行文件而已 -
DSA和RSA算法的差异
2009-11-20 19:13 15901978年就出现了这种算法 ... -
仿Google自动补全 jquery
2009-11-20 16:40 2868应大家要求,发一个包,方便大家使用,有问题欢迎e-mail : ... -
对称加密的两种方式
2009-11-18 22:33 1876对称加密,这东东现在 ... -
仿Google自动补全 jQuery 不含索引处理 2
2009-11-08 14:39 1076Servlet。。。。。。。。。。。。。。。。。 pu ... -
仿Google自动补全 jQuery 不含索引处理
2009-11-08 14:29 1344自动补全 1. 页面有一个文本框,一个自动提示层,一个按 ... -
Java数据库通用查询及封装
2009-11-08 13:54 6279Java数据库通用查询及封装 时常在网上看到,有关Java数据 ... -
Java实现快排的算法
2009-10-14 22:28 2950Java实现快排的算法 public class Quick ... -
Collection List Set Map 区别记忆
2009-10-13 20:15 928一篇对Java集合讲解不错的文档,不是我写的,转过来和大家分享 ... -
List Set Map实现机制
2009-10-13 20:07 1898List接口对Collection进行 ...
相关推荐
下面是一个简单的Java对象池实现,以`ObjectPool`类为例: ```java import java.util.ArrayList; import java.util.List; public class ObjectPool<T> { private List<T> pool; private ObjectFactory<T> ...
下面是一个简单的Java对象池实现示例: ```java import java.util.Stack; public class ObjectPool<T> { private Stack<T> pool = new Stack(); public ObjectPool(int initialSize, Supplier<T> creator) { ...
### Java对象池技术的原理及其实现 #### 一、对象池的概念与作用 对象池是一种软件设计模式,主要用于管理那些频繁创建与销毁且代价较高的对象。通过预先创建一定数量的对象,并将其保存在一个集合(通常称为池)...
这是一个很简单的实现啦对象池与线程池的融合,方法的主要参数,线程池大小、对象池大小、对象的创建工厂(继承接口自己实现),执行时传入方面名称即可。(invoke方法第一个为参数为方法名,第二是可变参数(及方法...
本教程将深入探讨如何在Java中实现一个简单的对象池。 首先,我们需要定义对象池的基本结构。一个对象池通常包含两个主要部分:存储池中对象的数据结构(例如数组或集合)以及管理这些对象的方法。在Java中,我们...
本资源包含两部分:工厂设计模式和对象池的设计与实现,主要面向Java开发者。 首先,我们来深入理解工厂设计模式。工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,而无需暴露创建逻辑,同时允许...
Java对象的创建不仅仅涉及到简单的`new`关键字操作,而是包含了类加载检查、内存分配、对象初始化等多个步骤。同时,对象在内存中的布局也非常重要,它不仅决定了对象的存储方式,还直接影响到程序的性能表现。通过...
这个压缩包包含三个文件:`ObjectPool.java`、`Test.java`和`TestObject.java`,分别代表了对象池的实现、测试类以及一个用于测试的对象类。 `ObjectPool.java` 文件很可能实现了对象池的基本逻辑。它可能包括以下...
7. **接口设计**:提供简单的API供其他组件请求和返回对象,使得对象池易于集成。 在实际应用中,对象池常用于数据库连接池、线程池等场景,通过复用资源来提升系统的响应速度和整体性能。对于开发者来说,理解并...
以下是一个简单的Apache对象池实现示例,以创建一个基于`GenericObjectPool`的String对象池: ```java import org.apache.commons.pool2.impl.GenericObjectPool; import org.apache.commons.pool2.impl....
以下代码片段展示了如何在Java中实现一个简单的数据库连接池: ```java public class BaseDao { private String dbUrl = ""; // 数据库URL private String jdbcDriver = ""; // JDBC驱动 private String ...
DBCP(Jakarta Commons DBCP)是Apache的一个开源项目,它基于Apache的Commons Pool对象池机制实现。DBCP提供了一个基本的、易于配置的数据库连接池。使用DBCP,开发者需要配置数据库URL、用户名、密码等信息,并...
2. **连接池**:连接池是一个对象池,存储已创建的数据库连接。应用程序在需要时从池中获取连接,使用完毕后归还,而不是直接关闭。这样可以减少创建和销毁连接的次数,提高系统性能。 3. **配置文件**:在手动实现...
对象池模式是一种设计模式,它在Java编程中用于管理和重用昂贵资源,如数据库连接、线程或网络套接字,以减少系统性能开销。当频繁创建和销毁这些资源时,对象池模式能显著提高效率。在描述的示例中,我们看到一个...
### Java连接池自定义更换数据库实现解析 #### 概述 在Java开发中,数据库连接是应用程序与数据库之间通信的关键环节。为了提高性能并有效管理这些连接,通常会使用数据库连接池来统一管理数据库连接资源。本文将...
Java对象缓冲实现中间件是一种高效的数据存储和访问机制,它通过在内存中创建一个对象池来减少对硬盘或网络资源的频繁访问,从而提高应用程序的性能。这种中间件设计的核心理念是利用内存的高速访问特性,将常用或者...