仿照Android的池化技术
/**
* 仿照Android池化技术
* @author fgtian
*
*/
public class ObjectCacheTest {
public static class ObjectItem {
private static int sPoolSize = 0;
private static final int MAX_CACHE = 10;
private static final Object sPoolLock = new Object();
private static ObjectItem sPool = null; private ObjectItem mNext = null;
private int mValue; public static ObjectItem obtain() {
synchronized (sPoolLock) {
if (null != sPool) {
ObjectItem item = sPool;
sPool = item.mNext;
item.mNext = null;
--sPoolSize;
return item;
}
}
return new ObjectItem();
} public static ObjectItem obtain(int value) {
synchronized (sPoolLock) {
if (null != sPool) {
ObjectItem item = sPool;
sPool = item.mNext;
item.mNext = null;
--sPoolSize;
item.mValue = value;
return item;
}
}
return new ObjectItem(value);
} public void recycle() {
synchronized (sPoolLock) {
if (sPoolSize < MAX_CACHE) {
mValue = 0;
this.mNext = sPool;
sPool = this; sPoolSize++;
}
}
} public ObjectItem() { } public ObjectItem(int value) {
mValue = value;
} @Override
public String toString() {
return String.valueOf(mValue);
}
} public static final void main(String[] args) {
ObjectItem item1 = ObjectItem.obtain(1);
item1.recycle();
ObjectItem item2 = ObjectItem.obtain(3);
if (item1 == item2) {
System.out.println("YES, USE THE SAME OBJECT");
} else {
System.out.println("ERROR");
}
}
}
仿照Android的池化技术的更多相关文章
- Java--对象池化技术 org.apache.commons.pool2.ObjectPool
org.apache.commons.pool2.ObjectPool提供了对象池,开发的小伙伴们可以直接使用来构建一个对象池 使用该对象池具有两个简单的步骤: 1.创建对象工厂,org.apache ...
- 对象池化技术 org.apache.commons.pool
恰当地使用对象池化技术,可以有效地减少对象生成和初始化时的消耗,提高系统的运行效率.Jakarta Commons Pool组件提供了一整套用于实现对象池化的框架,以及若干种各具特色的对象池实现,可以 ...
- SPP空间金字塔池化技术的直观理解
空间金字塔池化技术, 厉害之处,在于使得我们构建的网络,可以输入任意大小的图片,不需要经过裁剪缩放等操作. 是后续许多金字塔技术(psp,aspp等)的起源,主要的目的都是为了获取场景语境信息,获取上 ...
- CVPR 2019|PoolNet:基于池化技术的显著性检测 论文解读
作者 | 文永亮 研究方向 | 目标检测.GAN 研究动机 这是一篇发表于CVPR2019的关于显著性目标检测的paper,在U型结构的特征网络中,高层富含语义特征捕获的位置信息在自底向上的传播过 ...
- Java 数据持久化系列之池化技术
在上一篇文章<Java 数据持久化系列之JDBC>中,我们了解到使用 JDBC 创建 Connection 可以执行对应的SQL,但是创建 Connection 会消耗很多资源,所以 Ja ...
- commons-pool2 池化技术探究
一.前言 我们经常会接触各种池化的技术或者概念,包括对象池.连接池.线程池等,池化技术最大的好处就是实现对象的重复利用,尤其是创建和使用大对象或者宝贵资源(HTTP连接对象,MySQL连接对象)等方面 ...
- 《Mybatis 手撸专栏》第6章:数据源池化技术实现
作者:小傅哥 博客:https://bugstack.cn - 手写Mybatis系列文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 码农,只会做不会说? 你有发现吗,其实很大一部分码农 ...
- 池化技术之Java线程池
https://blog.csdn.net/jcj_2012/article/details/84906657 作用 线程池,通过复用线程来提升性能; 背景 线程是一个操作系统概念.操作系统负责这个 ...
- 池化技术(二)HikariCP是如何管理数据库连接的?
基于依赖程序的版本信息:HikariCP:3.3.1 驱动程序mysql-connector-java:8.0.17 上一篇:Druid是如何管理数据库连接的 零.类图和流 ...
随机推荐
- PL/SQL笔记(一)
PL/SQL概述 PL/SQL是一种高级的数据库程序设计语言,专门使用与Oracle语言基于数据库的服务器的内部,所以PL/SQL代码可以对数据库进行快速的处理. 1.什么是PL/SQL? PL/SQ ...
- vue2.0 踩坑记录之组件
- did you register the component correctly? For recursive components, make sure to provide the " ...
- CQRS之旅——旅程6(我们系统的版本管理)
旅程6:我们系统的版本管理 准备下一站:升级和迁移 "变化是生活的调味品."威廉·考珀 此阶段的最高目标是了解如何升级包含实现CQRS模式和事件源的限界上下文的系统.团队在这一阶段 ...
- python中如何在一张图上画两条折线
摘自:https://segmentfault.com/q/1010000002760775
- css3-13 css3的3D动画如何实现
css3-13 css3的3D动画如何实现 一.总结 一句话总结:这里是transform+setInterval实现.transform属性里面的rotate属性值变成rotateX或rotateY ...
- SDK应该包括什么东西
作者:朱金灿 来源:http://blog.csdn.net/clever101 如果让你设计和开发一个SDK(软件二次开发包),你认为里面应该有什么东西?首先接口文件和库文件之类是必不可少的,否则别 ...
- DOS命令具体解释
net use $">\\ip\ipc$Content$nbsp;" " /user:" " 建立IPC空链接 net use $" ...
- [Swift] Add Scroll View
import UIKit class AboutViewController : UIViewController @IBOutlet weak var scrollView: UIScrollVie ...
- python3报错
这个错误是我在从Excel中导入数据,,x,y 和z(z代表了强度) 然后通过xyz画出一个二维的灰度图片所出现的错误 原因是因为用mcml生成的数据如: TypeError: cannot per ...
- Linux系统编程——线程私有数据
在多线程程序中.常常要用全局变量来实现多个函数间的数据共享.因为数据空间是共享的,因此全局变量也为全部线程共同拥有. 測试代码例如以下: #include <stdio.h> #inclu ...