JFinal

登录 注册

CacheKit的一点疑问

最近在做RedisKit去参考CacheKit中的一些方法

发现CacheKit中getOrAddCache的时候做了一个同步锁,对于缓存来说的话如果并发导致同一个cacheName的值被后一个线程操作给覆盖掉了其实问题也不大吧,但是如果加了同步锁,每次去取值的时候这个类的吞吐量会大大减少,这个性能是不是极大的降低了?是出于什么考虑才会去加这个同步锁呢?

这边是jfinal ehcache中同步锁的代码

(cache == ) {
   () {
      cache = .getCache(cacheName);
      (cache == ) {
         .warn(+ cacheName + );
         .addCacheIfAbsent(cacheName);
         cache = .getCache(cacheName);
         .debug(+ cacheName + );
      }
   }
}


评论

  • 07-16 10:53
    这段同步代码去掉也可以让程序正常工作,但是 cacheManager.addCacheIfAbsent(cacheName); 方法上有 synchronized 关键字,添加一个针对线程的 double check 是为了提升点性能

    当然 getOrAddCache(...) 应该不算热点代码,通常情况下就算不用 double check 模式对性能应该也不会影响
  • 发送