我利用OSCache作为缓存,写了一个Filter来缓存页面。
碰到一个比较迷惑的问题,如果两个线程同时访问同一个页面。会造成缓存写入2次啊。
比如:
 try {
       /* 查询缓存内容是否已经存在 */ (1)
 } catch (NeedsRefreshException ex) {
     /* 没有命中,生成页面并写入缓存 */  (2)
 }本来试过用读写锁来应对的,可是同时可以多个读就会产生问题。两个线程同时访问同一个页面,两个线程肯定是同时都没有命中进入(2)运行了。
现在是把整个try块都用synchronized (this){}包起来,但这样会降低并发速度。
想请问,这里如何来同步比较好?
我看过OSCache自带的一个Filter(com.opensymphony.oscache.web.filter.CacheFilter),里面好像根本就没有考虑同步。