- 浏览: 85475 次
- 性别:
- 来自: 苏州
最新评论
-
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 1521项目来了,,需求下来,,怕赔不起,,决定用热备 可怜的我,, ... -
江湖求方案,类似SSO系统的需求
2010-10-16 10:59 1451现有资料,大Boss交代我来弄,说实话,这东东我也不知道怎么 ... -
js array
2010-07-04 11:18 994zhuan zi http://renxiangzyq.i ... -
Ldap之活动目录之userAccountControl
2010-04-22 10:27 3808When you open the properties fo ... -
Ldap之活动目录之属性
2010-04-22 10:19 1908“常规”标签 姓 Sn 名 Givename ... -
Ldap之活动目录介绍三
2010-04-22 10:12 1202安装第二台域控制器 在安装完第一台域控制器后其域名为 n ... -
Ldap之活动目录介绍二
2010-04-22 10:10 1277运行 Active Directory 安 ... -
Ldap之活动目录介绍一
2010-04-22 09:43 2611最近一直在做java通过Ldap去操作活动目录数据的东东,过程 ... -
我迷茫,我应该怎么走。望各位JE大哥指点!
2010-03-26 09:56 1625小弟六月毕业,在学校还算好学生,从大二起接触编程,,那时的编程 ... -
xp桌面回收站恢复
2010-02-21 19:14 831开始-运行gpedit.msc-本地计算机策略-用户配 ... -
MyEclipse7.5注册机
2010-01-25 17:29 930首先感谢提供源码的那位大牛,我只是做成了exe执行文件而已 -
DSA和RSA算法的差异
2009-11-20 19:13 15521978年就出现了这种算法 ... -
仿Google自动补全 jquery
2009-11-20 16:40 2834应大家要求,发一个包,方便大家使用,有问题欢迎e-mail : ... -
对称加密的两种方式
2009-11-18 22:33 1817对称加密,这东东现在 ... -
仿Google自动补全 jQuery 不含索引处理 2
2009-11-08 14:39 1044Servlet。。。。。。。。。。。。。。。。。 pu ... -
仿Google自动补全 jQuery 不含索引处理
2009-11-08 14:29 1313自动补全 1. 页面有一个文本框,一个自动提示层,一个按 ... -
Java数据库通用查询及封装
2009-11-08 13:54 6243Java数据库通用查询及封装 时常在网上看到,有关Java数据 ... -
Java实现快排的算法
2009-10-14 22:28 2922Java实现快排的算法 public class Quick ... -
Collection List Set Map 区别记忆
2009-10-13 20:15 889一篇对Java集合讲解不错的文档,不是我写的,转过来和大家分享 ... -
List Set Map实现机制
2009-10-13 20:07 1868List接口对Collection进行 ...
相关推荐
这是一个很简单的实现啦对象池与线程池的融合,方法的主要参数,线程池大小、对象池大小、对象的创建工厂(继承接口自己实现),执行时传入方面名称即可。(invoke方法第一个为参数为方法名,第二是可变参数(及方法...
最简单高效的JAVA对象池、线程池、以及使用对象池技术实现的数据库连接池 已在生产运行5年以上的代码 若有任何问题请与我联系
Stormpot是Java的对象池库。 用它来回收创建成本很高的对象。 该库将负责在后台创建和销毁您的对象。 Stormpot非常成熟,已在生产中使用,并且已经在测试中完成了数百万亿[ ]个声明发布周期。 它比任何竞争池都更...
对象池模式经常用在频繁创建、销毁对象(并且对象创建、销毁开销很大)的场景,比如数据库连接池、线程池、任务队列池等。本代码简单,没有限制对象池大小
第2章 Java对象持久化技术概述 2.1 直接通过JDBC API来持久化实体域对象 2.2 ORM简介 2.2.1 对象-关系映射的概念 2.2.2 ORM中间件的基本使用方法 2.2.3 常用的ORM中间件 2.3 实体域对象的其他持久化模式...
Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、火焰效果的线程、Applet的高度,图片到图片装载器、绘制火焰效果的X坐标...
一种通用的内存池(也位于RAM区),用于存放所有的java对象。堆不同于堆栈的好处是:编译器不需要知道要从堆里分配多少存储区域,也不必知道存储的数据在堆里存活多长时间。因此,在堆里分配存储有很大的灵活性。当...
Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、火焰效果的线程、Applet的高度,图片到图片装载器、绘制火焰效果的X坐标...
JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...
JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...
JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...
JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...
JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...
JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...
JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...
JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...
一些Java细节 设计性事务处理 铭记要点 小结 第21章 开发EJB客户机 引言 EJBs的客户机 小结 第22章 开发可扩缩的EJB应用程序 引言 Enterprise JavaBeans的优点 EJB的广阔开放空间...
│ Java面试题05.java面向对象的特征.mp4 │ Java面试题06.装箱和拆箱.mp4 │ Java面试题07.==和equals的区别.mp4 │ Java面试题08.String.mp4 │ Java面试题09.讲一下java中的集合.mp4 │ Java面试题10.ArrayList ...
JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...