问题描述
一个类中有很多个函数都包含一个同步锁,锁都是同一个对象method1(){synchronized(obj){}}method2(){synchronized(obj){}}method3()...该锁的class跑在一个服务进程里,有很多客户端访问该进程,在一个客户端中发现总是阻塞在method()函数里在等待这个锁被释放,我想知道该锁此时被谁占用了,其他方法中哪个方法在同步锁的块中做耗时操作?请问有什么方法吗最笨的方法是打出每个同步锁方法的时间来判断,但是如果有方法大家时间都差不多也不是能准确定位
解决方案
解决方案二:
用jvisualvm监控吧,JDK自带的,装上插件
解决方案三:
谢谢啊,不过我不是纯Java环境,我是运行在Android手机平台的
解决方案四:
交给JVM处理优先级就是难调试。或许可以用打印区分一下
解决方案五:
打印真的不一定是个好办法,sync的块好多啊,有几十个了,这个service还被很多client调用,所以真心不推荐啊
解决方案六:
你设个全局变量不就行了!每次方法独占锁的时候,就把方法签名放到这个变量里,方法解锁时,就把该全局变量的值清掉
解决方案七:
androidadt有个ddms还是神码的能够能记录每个函数的执行时间你调试一下然后看结果
解决方案八:
引用6楼lds1ove的回复:
androidadt有个ddms还是神码的能够能记录每个函数的执行时间你调试一下然后看结果
eclipse
解决方案九:
不过打log也是很不错呀看哪个时间长
解决方案十:
该回复于2014-09-22 08:51:06被版主删除
时间: 2024-10-30 13:22:33