java池模式_JAVA模式 对象池 简要代码示例
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模式 对象池 简要代码示例相关推荐
- java short字段_Java Field setShort()用法及代码示例
java.lang.reflect.Field的setShort()方法用于将字段的值设置为指定对象的缩写.当您需要将对象的字段值设置为短时,可以使用此方法在对象上设置值. 用法: public vo ...
- java range(10)_Java Year range()用法及代码示例
Year类的range()方法用于获取最大值和最小值的字段范围,并将该字段作为参数传递给此方法.此方法的返回值是该字段的ValueRange对象,并且该方法仅对Year对象支持的那些字段返回Value ...
- equals java的用法_Java ConcurrentLinkedDeque equals()用法及代码示例
java.util.ConcurrentLinkedDeque类的equals()方法用于比较指定对象与此ConcurrentLinkedDeque是否相等.当且仅当指定对象也是ConcurrentL ...
- java short 写法_Java Short longValue()用法及代码示例
Short类的java.lang.Short.longValue()方法是Java中的内置方法,用于将Short对象的值返回为long. 用法 ShortObject.longValue() 返回值: ...
- java compareandset 包_Java AtomicReferenceArray compareAndSet()用法及代码示例
如果AtomicReferenceArray对象的索引i处的当前值等于期望值,则使用AtomicReferenceArray类的compareAndSet()方法原子地将AtomicReference ...
- java boolean例子_Java Field setBoolean()用法及代码示例
java.lang.reflect.Field的setBoolean()方法用于将字段的值设置为指定对象上的布尔值.当需要将对象的字段的值设置为布尔值时,可以使用此方法在对象上设置值. 用法: pub ...
- java calendar 天_Java Calendar getTime()用法及代码示例
Calendar类中的getTime()方法用于返回类似于由该Calendar的时间值表示的Date的对象. 用法: public final Date getTime() 参数:该方法不包含任何参数 ...
- java treemap用法_Java TreeMap put()用法及代码示例
TreeMap的java.util.TreeMap.put()方法用于将映射插入Map.这意味着我们可以将特定的键及其映射到的值插入到特定的映射中.如果传递了现有键,则以前的值将被新值替换.如果传递了 ...
- java dictionary 实例化_Java Dictionary put()用法及代码示例
字典的put()方法用于在字典中插入映射.这意味着可以将特定键及其值映射到特定字典中. 用法: DICTIONARY.put(key, value) 参数:该方法有两个参数,都属于Dictionary ...
- java collections 用法_Java Collections unmodifiableCollection()用法及代码示例
java.util.Collections类的unmodifiableCollection()方法用于返回指定集合的不可修改视图.此方法允许模块为用户提供对内部集合的只读访问权限.对返回的集合&q ...
最新文章
- 正則表達式截取字符串两字符间的内容
- 什么是Low Code ? 居然能威胁到专业程序员?
- 消息中间件选型分析 —— 从 Kafka 与 RabbitMQ 的对比来看全局
- MySql中添加用户/删除用户
- 杨元:CSS浮动(float,clear)通俗讲解
- 如何在几天时间内快速理解一个陌生行业?
- 【数据库开发】windows下hiredis的编译(主要是包括一些异步编程的错误)
- layui如何获取父节点的父节点_layui树形组件(右键、父节点选中子节点全被选中)...
- 要毕业了,整理要卖的书,发现大一大二的时候的涂鸦
- matlab评价模型和预测模型
- IT牛人---3IE工程师的传奇
- [Python从零到壹] 七.网络爬虫之Requests爬取豆瓣电影TOP250及CSV存储
- 移动硬盘无法读取分区表修复RAW格式修复
- android ios相机,曝苹果iOS13相机加入了这项功能 安卓上早就有了
- 只要你懂得人性,就不怕没钱赚!
- IDEA查看源码时,CRTL+点击,方法或者变量不能提示出来,以便进入
- vue3+ts 实现文件在线预览
- 机器学习 第二节 第二课
- 印媒称印度厂商Lava有意购买诺基亚钦奈工厂
- 大脑如何表征时间和情绪之间的关系?
热门文章
- Java:集合,Array、Collection(List/Set/Queue)、Map的遍历,比如:ArrayList,LinkedList,HashSet,HashMap...
- Form Follows Function – 绚丽的 HTML5 互动体验网站
- 一个用python写的从数字高程格式文件(DEM)中提取水系的模块
- DirectSound学习笔记(4):设备性能
- 十二、I/O复用介绍
- 机器学习资料合计(一)
- Iphone 清空联系人
- Linux SMB和NFS文件共享
- Redis安装及Java客户端的使用浅析(jedis)
- iOS开发UI篇—程序启动原理和UIApplication