limiter icon indicating copy to clipboard operation
limiter copied to clipboard

LocalLockServiceImpl类中synchronized代码块问题

Open yangzhenxiong opened this issue 7 years ago • 1 comments

你好,看了你关于接口限流的代码,学到了很多东西。 LocalLockServiceImpl类中使用synchronized (this)对代码块加上了实例锁,在跑APP.java的main方法时,偶尔会出现并发问题,程序会抛出java.lang.IllegalMonitorStateException异常。感觉需要改成synchronized #(LocalLockServiceImpl.class),将同步的代码块变成一个类锁。

private ReentrantLock initAndGetLock(String source) { ReentrantLock reentrantLock = lockMap.get(source); if (null == reentrantLock) { synchronized (this) { reentrantLock = lockMap.get(source); if (null == reentrantLock) { reentrantLock = new ReentrantLock(true); lockMap.put(source, reentrantLock); } } } return reentrantLock; }

yangzhenxiong avatar Jul 07 '17 01:07 yangzhenxiong

非常感谢 在APP.java里面确实存在这个问题,后续会将对这个方法进行修改 外部使用的话建议直接使用LimiterFacade(保证这个类是单例)

iMouseWu avatar Jul 18 '17 04:07 iMouseWu