• [转载]一个简单的内存缓存实现--一段漂亮的代码


    转自:http://www.oschina.net/code/snippet_55577_3887

     1 package test;
     2 
     3 import java.util.Map;
     4 import java.util.WeakHashMap;
     5 import java.util.concurrent.ConcurrentHashMap;
     6 import java.util.concurrent.locks.Lock;
     7 import java.util.concurrent.locks.ReentrantLock;
     8 
     9 public final class SimpleCache<K,V> {
    10 
    11     private final Lock lock = new ReentrantLock();
    12     private final int maxCapacity;
    13     private final Map<K,V> eden;
    14     private final Map<K,V> longterm;
    15 
    16     public SimpleCache(int maxCapacity) {
    17         this.maxCapacity = maxCapacity;
    18         this.eden = new ConcurrentHashMap<K,V>(maxCapacity);
    19         this.longterm = new WeakHashMap<K,V>(maxCapacity);
    20     }
    21 
    22     public V get(K k) {
    23         V v = this.eden.get(k);
    24         if (v == null) {
    25             lock.lock();
    26             try{
    27                 v = this.longterm.get(k);
    28             }finally{
    29                 lock.unlock();
    30             }
    31             if (v != null) {
    32                 this.eden.put(k, v);
    33             }
    34         }
    35         return v;
    36     }
    37 
    38     public void put(K k, V v) {
    39         if (this.eden.size() >= maxCapacity) {
    40             lock.lock();
    41             try{
    42                 this.longterm.putAll(this.eden);
    43             }finally{
    44                 lock.unlock();
    45             }
    46             this.eden.clear();
    47         }
    48         this.eden.put(k, v);
    49     }
    50 }

    实现思路其实很简单,但是包装做的很好,很巧妙,值得新手借鉴。

  • 相关阅读:
    python之路_保留原搜索页面条件
    python之路_面向对象相关知识点
    2-SAT习题讲解
    圆方树浅谈
    莫队浅谈&题目讲解
    矩阵树定理浅谈
    动态点分治浅谈
    线性基浅谈
    模板—费用流(最小费用最大流)
    模板—数学—Exgcd
  • 原文地址:https://www.cnblogs.com/wlrhnh/p/3661922.html
Copyright © 2020-2023  润新知