最近在做RedisKit去参考CacheKit中的一些方法
发现CacheKit中getOrAddCache的时候做了一个同步锁,对于缓存来说的话如果并发导致同一个cacheName的值被后一个线程操作给覆盖掉了其实问题也不大吧,但是如果加了同步锁,每次去取值的时候这个类的吞吐量会大大减少,这个性能是不是极大的降低了?是出于什么考虑才会去加这个同步锁呢?
这边是jfinal ehcache中同步锁的代码
(cache == ) { () { cache = .getCache(cacheName); (cache == ) { .warn(+ cacheName + ); .addCacheIfAbsent(cacheName); cache = .getCache(cacheName); .debug(+ cacheName + ); } } }
项目:JFinal
当然 getOrAddCache(...) 应该不算热点代码,通常情况下就算不用 double check 模式对性能应该也不会影响