如何设计一个本地缓存( 九 )
@Override
public V call() throws Exception {
return c.compute(arg);
;
FutureTask<V> ft = new FutureTask<V>(eval);
f = cache.putIfAbsent(arg ft);
if (f == null) {
f = ft;
ft.run();
try {
return f.get();
catch (CancellationException e) {
cache.remove(arg f);
compute是一个计算很费时的方法 , 所以这里把计算的结果缓存起来 , 但是有个问题就是如果两个线程同时进入此方法中怎么保证只计算一次 , 这里最核心的地方在于使用了ConcurrentHashMap的putIfAbsent方法 , 同时只会写入一个FutureTask;
总结
本文大致介绍了要设计一个本地缓存都需要考虑哪些点:数据结构 , 对象上限 , 清除策略 , 过期时间 , 线程安全 , 阻塞机制 , 实用的接口 , 是否持久化;当然肯定有其他考虑点 , 欢迎补充 。
推荐阅读
- 明日方舟|明日方舟:早露皮肤的攻击动作设计得很出彩,化身成白熊的指挥员
- 小鱼人|如何在新赛季稳定上分?善于抓失误的小鱼人,值得认真练上一波
- 设计师|魔兽世界:9.1.5刚上线,就要9.2了?来看设计师爆料的更多细节
- 雷神|原神:曾经有一个强力五星角色,却因各种“流言蜚语”,擦肩而过
- 阴阳师|阴阳师SR川猿强度如何 是否值得抽卡 改变斗技环境 大佬的新玩具
- 手机游戏|梦幻西游手游:活力如何换金币 一切都已给出 就看你的选择
- 次世代|韩国战队全军覆没,斗鱼选手实力强大,一人击溃一个队
- 手机游戏|LOL手游第一个世界赛,破晓杯火热开战,DKG能紧随EDG夺冠吗?
- 华佗|三国杀:两位\奶爸\,朱治与华佗比,强度如何呢?
- 亲朋上分|《亲朋上分》266391亲朋下分亲朋上下分永劫无间崔三娘技能介绍 崔三娘如何获得更多技能