package org.rui.util;

import java.util.ArrayList;

/**

* 对象复用模式

*

* @author PC

*

*/

public class PoolManager

{

//连接池对象

public static class PoolItem

{

boolean inUse = false;

Object item;//池数据

PoolItem(Object item)

{

this.item = item;

}

}

//连接池集合

private ArrayList items = new ArrayList();

public void add(Object item)

{

this.items.add(new PoolItem(item));

}

static class EmptyPoolException extends Exception

{

}

public Object get() throws EmptyPoolException

{

for (int i = 0; i < items.size(); i++)

{

PoolItem pitem = (PoolItem) items.get(i);

if (pitem.inUse == false)

{

pitem.inUse = true;

return pitem.item;

}

}

throw new EmptyPoolException();

// return null;

}

/**

* 释放连接

* @param item

*/

public void release(Object item)

{

for (int i = 0; i < items.size(); i++)

{

PoolItem pitem = (PoolItem) items.get(i);

if (item == pitem.item)

{

pitem.inUse = false;

return;

}

}

throw new RuntimeException(item + " not null");

}

}

package org.rui.util;

import org.junit.Test;

/**

* 对象池(Object pool)

*

* 并没有限制说只能创建一个对象。这种技术同样适用于创建固定数量的对象,但

* 是,这种情况下,你就得面对如何共享对象池里的对象这种问题。如果共享对象很成

* 问题得话,你可以考虑以签入(check-in)签出(check-out)共享对象作为一种解决

* 方案。比如,就数据库来说,商业数据库通常会限制某一时刻可以使用的连接的个 数。下面这个例子就用对象池(object

* pool)实现了对这些数据库连接的管理。首 先,对象池对象(a pool of objects)的基本管理是作为一个单独的类来实现的。

*

* @author PC

*

*/

interface Connection

{

Object get();

void set(Object x);

}

class ConnectionImplementation implements Connection

{

public Object get()

{

return null;

}

public void set(Object s)

{

}

}

class ConnectionPool

{

//池管理对象

private static PoolManager pool = new PoolManager();

//指定连接数 并添加

public static void addConnections(int number)

{

for (int i = 0; i < number; i++)

pool.add(new ConnectionImplementation());

}

//获取连接

public static Connection getConnection()

throws PoolManager.EmptyPoolException

{

return (Connection) pool.get();

}

//释放指定的连接

public static void releaseConnection(Connection c)

{

pool.release(c);

}

}

//演示使用

public class ConnectionPoolDemo

{

static

{

ConnectionPool.addConnections(5);

}

@Test

public void test()

{

Connection c = null;

try

{

// 获得连接

c = ConnectionPool.getConnection();

} catch (PoolManager.EmptyPoolException e)

{

throw new RuntimeException(e);

}

// 设值

c.set(new Object());

//获取

c.get();

// 释放

ConnectionPool.releaseConnection(c);

}

@Test

public void test2()

{

Connection c = null;

try

{

c = ConnectionPool.getConnection();

} catch (PoolManager.EmptyPoolException e)

{

throw new RuntimeException(e);

}

c.set(new Object());

c.get();

ConnectionPool.releaseConnection(c);

}

public static void main(String args[])

{

// junit.textui.TestRunner.run(ConnectionPoolDemo.class);

}

}

java池模式_JAVA模式 对象池 简要代码示例相关推荐

  1. java short字段_Java Field setShort()用法及代码示例

    java.lang.reflect.Field的setShort()方法用于将字段的值设置为指定对象的缩写.当您需要将对象的字段值设置为短时,可以使用此方法在对象上设置值. 用法: public vo ...

  2. java range(10)_Java Year range()用法及代码示例

    Year类的range()方法用于获取最大值和最小值的字段范围,并将该字段作为参数传递给此方法.此方法的返回值是该字段的ValueRange对象,并且该方法仅对Year对象支持的那些字段返回Value ...

  3. equals java的用法_Java ConcurrentLinkedDeque equals()用法及代码示例

    java.util.ConcurrentLinkedDeque类的equals()方法用于比较指定对象与此ConcurrentLinkedDeque是否相等.当且仅当指定对象也是ConcurrentL ...

  4. java short 写法_Java Short longValue()用法及代码示例

    Short类的java.lang.Short.longValue()方法是Java中的内置方法,用于将Short对象的值返回为long. 用法 ShortObject.longValue() 返回值: ...

  5. java compareandset 包_Java AtomicReferenceArray compareAndSet()用法及代码示例

    如果AtomicReferenceArray对象的索引i处的当前值等于期望值,则使用AtomicReferenceArray类的compareAndSet()方法原子地将AtomicReference ...

  6. java boolean例子_Java Field setBoolean()用法及代码示例

    java.lang.reflect.Field的setBoolean()方法用于将字段的值设置为指定对象上的布尔值.当需要将对象的字段的值设置为布尔值时,可以使用此方法在对象上设置值. 用法: pub ...

  7. java calendar 天_Java Calendar getTime()用法及代码示例

    Calendar类中的getTime()方法用于返回类似于由该Calendar的时间值表示的Date的对象. 用法: public final Date getTime() 参数:该方法不包含任何参数 ...

  8. java treemap用法_Java TreeMap put()用法及代码示例

    TreeMap的java.util.TreeMap.put()方法用于将映射插入Map.这意味着我们可以将特定的键及其映射到的值插入到特定的映射中.如果传递了现有键,则以前的值将被新值替换.如果传递了 ...

  9. java dictionary 实例化_Java Dictionary put()用法及代码示例

    字典的put()方法用于在字典中插入映射.这意味着可以将特定键及其值映射到特定字典中. 用法: DICTIONARY.put(key, value) 参数:该方法有两个参数,都属于Dictionary ...

  10. java collections 用法_Java Collections unmodifiableCollection()用法及代码示例

    java.util.Collections类的unmodifiableCollection()方法用于返回指定集合的​​不可修改视图.此方法允许模块为用户提供对内部集合的只读访问权限.对返回的集合&q ...

最新文章

  1. 正則表達式截取字符串两字符间的内容
  2. 什么是Low Code ? 居然能威胁到专业程序员?
  3. 消息中间件选型分析 —— 从 Kafka 与 RabbitMQ 的对比来看全局
  4. MySql中添加用户/删除用户
  5. 杨元:CSS浮动(float,clear)通俗讲解
  6. 如何在几天时间内快速理解一个陌生行业?
  7. 【数据库开发】windows下hiredis的编译(主要是包括一些异步编程的错误)
  8. layui如何获取父节点的父节点_layui树形组件(右键、父节点选中子节点全被选中)...
  9. 要毕业了,整理要卖的书,发现大一大二的时候的涂鸦
  10. matlab评价模型和预测模型
  11. IT牛人---3IE工程师的传奇
  12. [Python从零到壹] 七.网络爬虫之Requests爬取豆瓣电影TOP250及CSV存储
  13. 移动硬盘无法读取分区表修复RAW格式修复
  14. android ios相机,曝苹果iOS13相机加入了这项功能 安卓上早就有了
  15. 只要你懂得人性,就不怕没钱赚!
  16. IDEA查看源码时,CRTL+点击,方法或者变量不能提示出来,以便进入
  17. vue3+ts 实现文件在线预览
  18. 机器学习 第二节 第二课
  19. 印媒称印度厂商Lava有意购买诺基亚钦奈工厂
  20. 大脑如何表征时间和情绪之间的关系?

热门文章

  1. Java:集合,Array、Collection(List/Set/Queue)、Map的遍历,比如:ArrayList,LinkedList,HashSet,HashMap...
  2. Form Follows Function – 绚丽的 HTML5 互动体验网站
  3. 一个用python写的从数字高程格式文件(DEM)中提取水系的模块
  4. DirectSound学习笔记(4):设备性能
  5. 十二、I/O复用介绍
  6. 机器学习资料合计(一)
  7. Iphone 清空联系人
  8. Linux SMB和NFS文件共享
  9. Redis安装及Java客户端的使用浅析(jedis)
  10. iOS开发UI篇—程序启动原理和UIApplication