IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]Message缓存池的实现原理

    grumoon发表于 2014-08-02 19:12:58
    love 0

    原理就是采用了在一个Message的类变量,维护了一个Message实例的链表

    以下是部分源代码和注释

    private static Message sPool; //类变量,表示Message池,指向链表的表头
    
    private static int sPoolSize = 0; //链表的长度
    
    private static final int MAX_POOL_SIZE = 10; //链表池的最大长度
    
    Message next; //实例变量,指向链表中下一个Message的实例
    
    
    
    public static Message obtain() {
    	synchronized (sPoolSync) {
    		//如果链表池不为空,就取走表头的一个Message实例,减少了创建对象的操作
    		if (sPool != null) {
    			Message m = sPool;
    			sPool = m.next;
    			m.next = null;
    			sPoolSize--;
    			return m;
    		}
    	}
    
    	//如果链表为空,创建新实例
    	return new Message();
    }
    
    
    
    public void recycle() {
    	clearForRecycle();
    	//当一个Message不再使用时,如果当前链表的数量少于池大小(默认10个),将此Message加入链表中
    	synchronized (sPoolSync) {
    		if (sPoolSize < MAX_POOL_SIZE) {
    			next = sPool;
    			sPool = this;
    			sPoolSize++;
    		}
    	}
    }
    




沪ICP备19023445号-2号
友情链接