仿照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的池化技术

时间: 2024-10-12 14:07:25

仿照Android的池化技术的相关文章

池化技术——自定义线程池

目录 池化技术--自定义线程池 1.为什么要使用线程池? 1.1.池化技术的特点: 1.2.线程池的好处: 1.3.如何自定义一个线程池 2.三大方法 2.1.单个线程的线程池方法 2.2.固定的线程池的大小的方法 2.3.可伸缩的线程池的方法 2.4.完整的测试代码为: 3.为什么要自定义线程池?三大方法创建线程池的弊端分析 4.七大参数 5.如何手动的去创建一个线程池 6.四种拒绝策略 6.1.会抛出异常的拒绝策略 6.2.哪来的去哪里拒绝策略 6.3.丢掉任务拒绝策略 6.4.尝试竞争拒绝

Java 数据持久化系列之池化技术

在上一篇文章<Java 数据持久化系列之JDBC>中,我们了解到使用 JDBC 创建 Connection 可以执行对应的SQL,但是创建 Connection 会消耗很多资源,所以 Java 持久化框架中往往不直接使用 JDBC,而是在其上建立数据库连接池层. 今天我们就先来了解一下池化技术的必要性.原理:然后使用 Apache-common-Pool2实现一个简单的数据库连接池:接着通过实验,对比简单连接池.HikariCP.Druid 等数据库连接池的性能数据,分析实现高性能数据库连接池

Android插件化技术简介

https://blog.csdn.net/io_field/article/details/79084630 可以通过反射 事先定义统一接口的方式,访问插件中的类和方法 还可以在AndroidManifest.xml中动态注册组件Activity.Service.BroadcastReceiver.ContentProvider(DroidPlugin实现) https://www.jianshu.com/p/e61a4d10e122 插件化的原理无非就是这些: 通过DexClassLoade

Android动态加载技术(插件化技术)

No1: 插件化技术的好处: 1)减轻应用的内存和CPU占用 2)实现热插拔,即在不发布新版本的情况下更新某些模块 No2: 插件化方案必须要解决三个基础性问题:资源访问.Activity生命周期的管理和ClassLoader的管理 No3: 宿主是指普通的apk,插件一般指经过处理的dex或者apk.插件化框架大多采用apk作为插件,很多需要用到代理Activity,插件Activity的启动大多数是借助一个代理Activity来实现的. No4: Activity的工作主要是通过Contex

Java(Android)线程池 总结

一种是使用Executors工厂生产线程池:另一种是直接使用ThreadPoolExecutor自定义. Executors工厂生产线程池 Java(Android)线程池 Trinea 介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用.本文是基础篇,后面会分享下线程池一些高级功能. 1.new Thread的弊端执行一个异步任务你还只是如下new Thread吗? Java 1 2 3 4 5 6 7 newThread(newRunnable(){ @Ove

高可用的池化 Thrift Client 实现(源码分享)

本文将分享一个高可用的池化 Thrift Client 及其源码实现,欢迎阅读源码(Github)并使用,同时欢迎提出宝贵的意见和建议,本人将持续完善. 本文的主要目标读者是对 Thrift 有一定了解并使用的童鞋,如对 Thrift 的基础知识了解不多或者想重温一下基础知识,推荐先阅读本站文章<和 Thrift 的一场美丽邂逅>. 下面进入正题. 为什么我们需要这么一个组件? 我们知道,Thrift 是一个 RPC 框架体系,可以非常方便的进行跨语言 RPC 服务的开发和调用.然而,它并没有

Java(Android)线程池---基础篇

1.new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? 1 newThread(newRunnable(){ 2 3 @Override 4 publicvoidrun(){ 5 // TODO Auto-generated method stub 6 } 7 }).start(); 那你就out太多了,new Thread的弊端如下: a. 每次new Thread新建对象性能差.b. 线程缺乏统一管理,可能无限制新建线程,相互之间竞争,及可能占用过多系统资源导致

Android动态加载技术三个关键问题详解

编者按:InfoQ开设新栏目“品味书香”,精选技术书籍的精彩章节,以及分享看完书留下的思考和收获,欢迎大家关注.本文节选自任玉刚著<Android开发艺术探索>中的章节“Android的动态加载技术”,探讨了Android动态加载的三个关键问题. 动态加载技术(也叫插件化技术)在技术驱动型的公司中扮演着相当重要的角色,当项目越来越庞大的时候,需要通过插件化来减轻应用的内存和CPU占用,还可以实现热插拔,即在不发布新版本的情况下更新某些模块.动态加载是一项很复杂的技术,这里主要介绍动态加载技术中

携程Android App插件化和动态加载实践

携程Android App的插件化和动态加载框架已上线半年,经历了初期的探索和持续的打磨优化,新框架和工程配置经受住了生产实践的考验.本文将详细介绍Android平台插件式开发和动态加载技术的原理和实现细节,回顾携程Android App的架构演化过程,期望我们的经验能帮助到更多的Android工程师. 需求驱动 2014年,随着业务发展需要和携程无线部门的拆分,各业务产品模块归属到各业务BU,原有携程无线App开发团队被分为基础框架.酒店.机票.火车票等多个开发团队,从此携程App的开发和发布