zoukankan      html  css  js  c++  java
  • [转载]一个简单的内存缓存实现--一段漂亮的代码

    转自: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 }

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

  • 相关阅读:
    后海日记(8)
    后海日记(8)
    后海日记(7)
    后海日记(7)
    hadoop自己写的最高温度程序源码
    hadoop自己写的最高温度程序源码
    20张图为您讲述磁盘发展史
    20张图为您讲述磁盘发展史
    2017"百度之星"程序设计大赛
    汕头市赛srm1X T3
  • 原文地址:https://www.cnblogs.com/wlrhnh/p/3661922.html
Copyright © 2011-2022 走看看