jetcache
jetcache copied to clipboard
关于com.alicp.jetcache.Cache#tryLock 方法的线程安全问题,求解,感谢!
你好最近项目中准备应道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();}
}