首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 互联网 >

弱引述与ThreadLocal的结合

2013-11-02 
弱引用与ThreadLocal的结合public class CloseableThreadLocalT implements Closeable {private ThreadL

弱引用与ThreadLocal的结合
public class CloseableThreadLocal<T> implements Closeable { private ThreadLocal<WeakReference<T>> t = new ThreadLocal<WeakReference<T>>(); // Use a WeakHashMap so that if a Thread exits and is // GC'able, its entry may be removed: private Map<Thread,T> hardRefs = new WeakHashMap<Thread,T>(); // Increase this to decrease frequency of purging in get: private static int PURGE_MULTIPLIER = 20; // On each get or set we decrement this; when it hits 0 we // purge. After purge, we set this to // PURGE_MULTIPLIER * stillAliveCount. This keeps // amortized cost of purging linear. private final AtomicInteger countUntilPurge = new AtomicInteger(PURGE_MULTIPLIER); protected T initialValue() { return null; } public T get() { WeakReference<T> weakRef = t.get(); if (weakRef == null) { T iv = initialValue(); if (iv != null) { set(iv); return iv; } else { return null; } } else { maybePurge(); return weakRef.get(); } }... ....

?

这里面用的很好:由于ThreadLocal在使用上并么有数量的限制,需要靠使用者手工删除的方式才能释放对象的引用,因此实际上很容易造成内存泄露,而CloseableThreadLocal使用WeekReference的方式缓存ThreadLocal的数据,很好地解决了这个问题,Perfect!

?

?

热点排行