高效可伸缩的结果缓存
高效可伸缩的结果缓存
引鸩怼孑 发表于3年前
高效可伸缩的结果缓存
  • 发表于 3年前
  • 阅读 10
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: 高效可伸缩的结果缓存
  1. /** 
  2.  * 要执行的算法,返回结果v 
  3.  */  
  4. public interface Computable<A, V> {  
  5.     public V comput(final A arg);  
  6.   
  7. }  

 

Java代码   收藏代码
  1. /** 
  2.  * 用于缓存数据 
  3.  */  
  4. public class Memoizer<A, V> implements Computable<A, V> {  
  5.   
  6.     private final ConcurrentMap<A, Future<V>> cache = new ConcurrentHashMap<A, Future<V>>();  
  7.   
  8.     private final Computable<A, V> c;  
  9.   
  10.     private Memoizer(Computable<A, V> c) {  
  11.         this.c = c;  
  12.     }  
  13.   
  14.     @Override  
  15.     public V comput(final A arg) {  
  16.         while (true) {  
  17.             Future<V> f = cache.get(arg);  
  18.             if (f == null) {  
  19.                 Callable<V> eval = new Callable<V>() {  
  20.   
  21.                     @Override  
  22.                     public V call() throws Exception {  
  23.                         return c.comput(arg);  
  24.                     }  
  25.                 };  
  26.                 FutureTask<V> ft = new FutureTask<V>(eval);  
  27.                 //若没有这个key则put。总是返回oldValue  
  28.                 f = cache.putIfAbsent(arg, ft);  
  29.                 if (f == null) {  
  30.                     f = ft;  
  31.                     ft.run();  
  32.                 }  
  33.   
  34.             }  
  35.             return null;  
  36.         }  
  37.     }  
  38.   
  39. }  


你看懂了吗?

共有 人打赏支持
粉丝 38
博文 198
码字总数 16947
×
引鸩怼孑
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: