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

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();
}
}

最新文章

  1. 玩转spring boot——结合redis
  2. js生成二维码 中间有logo
  3. Env:Gvim开发环境配置笔记--Windows篇
  4. C# web 网页刷新时数据集的保存和应用
  5. 《SDN核心技术剖析和实战指南》3.1控制器核心技术读书笔记
  6. sublime开启php自动代码补全
  7. 如何使用win7自带的备份还原以及创建系统镜像------傻瓜式教程
  8. PAT甲级训练刷题代码记录
  9. java的jar包加密
  10. 洛谷 P2678 & [NOIP2015提高组] 跳石头
  11. Python argparse 模块
  12. idea热部署+自动编译
  13. python-web微信实现
  14. VSCode Install Go
  15. Selenium 节点交互
  16. centos7.2+php7.2+nginx1.12.0+mysql5.7配置
  17. UOJ 310 黎明前的巧克力(FWT)
  18. Coursera SDN M1.2.1 SDN History: Programmable Networks 2
  19. H5上传图片,并且显示进度条
  20. android jni log

热门文章

  1. mvc中文件上传下载
  2. Ajax(django)
  3. node.js初识05
  4. tp 例子=登录逻辑
  5. Python记录5:函数1
  6. Vue系列之 => 全局,私有过滤器
  7. SQL 中的连接查询
  8. Linux 操作系统镜像下载
  9. OpenVPN 服务端(pritunl)的一些运维经验
  10. 设计模式之Proxy(代理)(转)