limiter
limiter copied to clipboard
LocalLockServiceImpl类中synchronized代码块问题
你好,看了你关于接口限流的代码,学到了很多东西。 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; }
非常感谢
在APP.java里面确实存在这个问题,后续会将对这个方法进行修改
外部使用的话建议直接使用LimiterFacade
(保证这个类是单例)