• Java项目源码学习笔记(一):IdentityCache


    import java.lang.ref.ReferenceQueue;
    import java.lang.ref.WeakReference;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Set;
    
    public class IdentityCache<K, V>{
    	
    	private final HashMap<K, Entry<K,V>> mWeakMap = new HashMap<K, Entry<K, V>>();
    	private ReferenceQueue<V> mQueue = new ReferenceQueue<V>();
    
    	public IdentityCache(){}
    
    	private static class Entry<K, V> extends WeakReference<V>{
    		K mKey;
    		public Entry(K key, V value, ReferenceQueue<V> queue){
    			super(value, queue);
    			mKey = key;
    		}
    	}
    
    	private void cleanUpWeakMap(){
    		Entry<K, V> entry = (Entry<K,V>)mQueue.poll();
    		while(entry != null){
    			mWeakMap.remove(entry.mKey);
    			entry = (Entry<K,V>)mQueue.poll();
    		}
    	}
    
    	public synchronized V put(K key, V value){
    		cleanUpWeakMap();
    		Entry<K, V> entry = mWeakMap.put(key, new Entry<K,V>(key, value, mQueue));
    		return entry == null ? null : entry.get();
    	}
    
    	public synchronized V get(K key){
    		cleanUpWeakMap();
    		Entry<K,V> entry = mWeakMap.get(key);
    		return entry == null ? null : entry.get();
    	}
    
    	public synchronized ArrayList<K> keys(){
    		Set<K> set = mWeakMap.keySet();
    		ArrayList<K> result = new ArrayList<K>(set);
    		return result;
    	}
    }
    

    简单分析一个类,我们看看它的变量和public方法,这二者基本决定了类的用途。

    很显然,这是一个自定义容器类。它提供了一个容器变量和对外的接口put, get。

    细节说明:

    1. Entry:继承自WeakReference,封装容器要盛装的V对象,因此这个自定义容器类包括WeakReference的功能优势。而我们知道WeakReference对象本质内容是它封装的对象,这里是V。所以IdentityCache容器的功能就是——一个HashMap容器,同时容器盛放的对象具有WeakReference的功效。

    2. synchronized:表明这是一个并发容器,普通的HashMap并不具备并发的功能。

  • 相关阅读:
    Charles 环境安装
    postman的安装指南
    python-web自动化-三种等待方式(元素定位不到一)
    如何查找MySQL中查询慢的SQL语句
    1023 组个最小数
    linux学习笔记01
    P6461 [COCI2006-2007#5] TRIK
    P1181 数列分段Section I
    P4414 [COCI2006-2007#2] ABC
    如何安装oracle
  • 原文地址:https://www.cnblogs.com/fordreamxin/p/5398012.html
Copyright © 2020-2023  润新知