如何使用Object-Pool对象池
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,本篇内容介绍了"如何使用Object-Pool对象池"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!O
千家信息网最后更新 2025年01月20日如何使用Object-Pool对象池
本篇内容介绍了"如何使用Object-Pool对象池"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
Object-Pool 对象池
对于一个实例化比较困难的对象, 我们可以使用原型模式克隆一个对象, 这种方法是在创建的角度节约资源
另外一种节约资源的方法就是使用Object-Pool对象池模式, 它能将有限多个对象缓存起来,达到资源重复使用的目的,像我们常用的数据库连接池,其实就是保存了连接对象的 对象池.
public class SqlConnection { private Integer connectionId; public SqlConnection() { Random random = new Random(System.currentTimeMillis()); this.connectionId = random.nextInt(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } }}
模拟SqlConnection创建时间需要很久的情况
public abstract class ObjectPool{ private final Set canUse = new HashSet<>(); private final Set inUse = new HashSet<>(); protected abstract T create(); public synchronized T getOut() { if (canUse.isEmpty()) { canUse.add(create()); } var instance = canUse.iterator().next(); canUse.remove(instance); inUse.add(instance); return instance; } public synchronized void putIn(T instance) { inUse.remove(instance); canUse.add(instance); } @Override public synchronized String toString() { return String.format("可用=%d 使用中=%d", canUse.size(), inUse.size()); }}
public class SqlConnectionPool extends ObjectPool{ @Override protected SqlConnection create() { return new SqlConnection(); }}
public static void main(String[] args) { SqlConnectionPool sqlConnectionPool = new SqlConnectionPool(); System.out.println(sqlConnectionPool.toString()); var connection1 = sqlConnectionPool.getOut(); System.out.println(sqlConnectionPool.toString()); var connection2 = sqlConnectionPool.getOut(); var connection3 = sqlConnectionPool.getOut(); System.out.println(sqlConnectionPool.toString()); sqlConnectionPool.putIn(connection1); sqlConnectionPool.putIn(connection2); System.out.println(sqlConnectionPool.toString()); var connection4 = sqlConnectionPool.getOut(); var connection5 = sqlConnectionPool.getOut(); System.out.println(sqlConnectionPool.toString()); }
"如何使用Object-Pool对象池"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
对象
资源
内容
就是
情况
方法
更多
模式
知识
实用
困难
学有所成
接下来
原型
困境
多个
实例
实际
常用
数据
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
中国移动招聘网络安全题
江西网络安全竞赛答案
服务器新增共享文件
抚顺软件开发公司排名
晟同网络技术
键值型数据库
时序数据库 point
北京数据库安全箱批量定制
软件开发费用支付验收
浪潮服务器管理口镜像安装
工业网络技术教学实训设备
数据库数据统计分析的基本步骤是
软考中级数据库能挂吗
终端网络安全产品
如何加强网络技术安全系数
招工信息软件开发工程师
档案数据库安全保护措施
查询选修数据库的学生学号姓名
黑龙江互联网软件开发中心
哈工大网络安全就业
我的世界top服务器
软件开发阶段包括哪些内容
网络安全博客作文
网络安全教学实例
天津大学网络安全研究生录取分数
机械手和agv用什么软件开发的
网络安全监测装置说明书
武汉船舶职业技术学院数据库试题
开发者百度在线网络技术
山东爱卡族网络技术