对象池模式
来源:互联网 发布:java项目发布到服务器 编辑:程序博客网 时间:2024/06/04 01:03
对象池是使用成员变量来存储生成的对象
1、我需要一个放入池中的对象
public class Teacher { @Override public String toString() { return "我是一个老师"; }}
2、我需要池中对象的状态
public class ObjectStatus { private boolean status = true; /** * 占用 */ public void use() { status = false; } /** * 释放 */ public void release() { status = true; } /** * 检查是否可用 * * @return */ public boolean check() { return status; }}
public class TeacherPool { private volatile ConcurrentHashMap<Teacher, ObjectStatus> pool = new ConcurrentHashMap<>(); /** * 初始化对象池 */ public TeacherPool() { pool.put(new Teacher(), new ObjectStatus()); } /** * 取出可用对象 * * @return */ public synchronized Teacher take() { for (Teacher t : pool.keySet()) { if (pool.get(t).check()) { pool.get(t).use(); return t; } } Teacher t = new Teacher(); pool.put(t, new ObjectStatus()); return t; } /** * 归还已用对象 * * @param t */ public synchronized void put(Teacher t) { pool.get(t).release(); } /** * 当前对象池大小 * * @return */ public synchronized int size() { return pool.size(); }}
4、输出看效果
public class TeacherPoolExample { public static void main(String[] args) { TeacherPool pool = new TeacherPool(); new Thread(() -> { Teacher teacher = pool.take(); System.out.println(teacher.toString() + pool.size()); pool.put(teacher); }).start(); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } new Thread(() -> { Teacher teacher = pool.take(); System.out.println(teacher.toString() + pool.size()); pool.put(teacher); }).start(); }}
我是一个老师1
我是一个老师1
阅读全文
1 0
- 设计模式--对象池
- 对象池模式
- 对象池模式
- python设计模式之对象池模式
- Java中的对象池模式
- Java中的对象池模式
- 单例模式对象池
- JAVA模式 对象池 简要代码示例
- 对象池(Object Pool)模式
- Unity_设计模式_对象池_09
- 创建型设计模式(7):对象池模式
- 设计模式之对象池模式(Object Pool)
- Java/Android 设计模式系列(5)--对象池模式
- php设计模式-对象池模式(Object pool)
- IOS设计模式----对象池模式OBJC版
- 策略模式--对象行为模式
- 命令模式-对象行为模式
- 备忘录模式-对象行为模式
- kaldi-ctc的安装、编译、测试
- B. Preparing for Merge Sort
- 欢迎使用CSDN-markdown编辑器
- C++错误之严重性 代码 说明 项目 文件 行 禁止显示状态 错误 C4996 'strcpy':
- IRGAN:大一统信息检索模型的博弈竞争
- 对象池模式
- java值传递
- 【UML】关系之关联关系
- 从属性动画看自定义View(1)
- 2017 ACM-ICPC 网络赛 总结
- C语言长整型相乘
- OpenMAX编程初识
- MATLAB图像处理基础知识3 梯度
- 设计模式:责任链