jetcache icon indicating copy to clipboard operation
jetcache copied to clipboard

关于com.alicp.jetcache.Cache#tryLock 方法的线程安全问题,求解,感谢!

Open zhangchao6018 opened this issue 2 years ago • 0 comments

你好最近项目中准备应道com.alicp.jetcache.Cache#tryLock的锁,场景主要是进程级别的请求去重。 场景是当前进程多个请求并发请求某个key,发现这个key过期了,此时只需一个线程去刷新缓存即可

但是使用发现并发比较高时,还是有多个线程能够同时占用锁,以下是我的代码:求指教~

private static final Cache<String, String> cache = CaffeineCacheBuilder.createCaffeineCacheBuilder()
        .limit(1000)
        .expireAfterWrite(120, SECONDS)
        .buildCache();

@Test public void testLock1() { for (int i=1; i<=500; i++){ new Thread(() -> { try(AutoReleaseLock lock = cache.tryLock(key,1, TimeUnit.SECONDS)){ if(lock != null){ // ... System.out.println(Thread.currentThread().getName() + " " +"get"); } } },"thread" + i ).start(); } // 等待任务结束 try { SECONDS.sleep(10);} catch (InterruptedException e) {e.printStackTrace();}

}

zhangchao6018 avatar Aug 10 '21 06:08 zhangchao6018