Java synchronized 锁问题

问题描述

一个类中有很多个函数都包含一个同步锁,锁都是同一个对象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

Java synchronized 锁问题的相关文章

[Java] 方法锁、对象锁和类锁的意义和区别

版权声明:请尊重个人劳动成果,转载注明出处,谢谢! 目录(?)[+] 首先的明白Java中锁的机制 synchronized  在修饰代码块的时候需要一个reference对象作为锁的对象.  在修饰方法的时候默认是当前对象作为锁的对象.  在修饰类时候默认是当前类的Class对象作为锁的对象.   线程同步的方法:sychronized.lock.reentrantLock分析 方法锁(synchronized修饰方法时) 通过在方法声明中加入 synchronized关键字来声明 synch

线程-关于java sychronized锁代码块对该对象的其它sychonized方法是否有影响的问题。

问题描述 关于java sychronized锁代码块对该对象的其它sychonized方法是否有影响的问题. 代码是书上例子,我简化了,启用线程ob1后,通过主线程调用sychonized方法mysuspend()和myresume()来控制ob1线程的等待与重启.线程从15开始倒数,0.5秒个,主线程在1秒时候暂停文字提示,再过1秒重启线程.例子中的sychonized代码块仅包含wait()判定部分,输出与预期一样,倒数到14的时候中断,之后又恢复.但是当我将sychonized代码块前移

多态-java创建锁对象的问题

问题描述 java创建锁对象的问题 在创建锁对象是都是用Lock Lock=new ReentrantLock();以多态的方式. 我想问可以使用ReentrantLock Lock=new ReentrantLock()的方式创建锁吗?_ 解决方案 Java synchronized 关于锁的对象顺序问题JAVA创建String对象的问题JAVA创建String对象问题 解决方案二: 可以啊,只不过前一个是用基类类型赋给子类实例,后者直接是个子类类型. 解决方案三: 当然可以,前者是多态,后者

java 多线程-锁详解及示例代码_java

自 Java 5 开始,java.util.concurrent.locks 包中包含了一些锁的实现,因此你不用去实现自己的锁了.但是你仍然需要去了解怎样使用这些锁. 一个简单的锁 让我们从 java 中的一个同步块开始: public class Counter{ private int count = 0; public int inc(){ synchronized(this){ return ++count; } } } 可以看到在 inc()方法中有一个 synchronized(th

java synchronized关键字的用法_java

0.先导的问题代码     下面的代码演示了一个计数器,两个线程同时对i进行累加的操作,各执行1000000次.我们期望的结果肯定是i=2000000.但是我们多次执行以后,会发现i的值永远小于2000000.这是因为,两个线程同时对i进行写入的时候,其中一个线程的结果会覆盖另外一个. public class AccountingSync implements Runnable { static int i = 0; public void increase() { i++; } @Overr

Java互斥锁简单实例_java

本文实例讲述了Java互斥锁.分享给大家供大家参考.具体分析如下: 互斥锁,常常用于多个线程访问独占式资源,比如多个线程同时写一个文件,虽然互斥访问方式不够高效,但是对于一些应用场景却很有意义 //没有互斥锁的情况(可以自己跑跑看运行结果): public class LockDemo { // private static Object lock = new Object(); // static确保只有一把锁 private int i = 0; public void increaseI(

锁定-一个关于多线程安全问题的代码,synchronized锁的应用,大家看看当中的特点

问题描述 一个关于多线程安全问题的代码,synchronized锁的应用,大家看看当中的特点 public class TestDemo{ public static void main(String[] args) { final SyncDemo4 s = new SyncDemo4(); //final SyncDemo4 s1 = new SyncDemo4(); Thread t1 = new Thread(){ public void run(){ s.methodA(); } };

java synchronized没有起作用

问题描述 java synchronized没有起作用 package com.wxb.syn; class Semaphore{} public class BalanceTest extends Thread{ public static int balance = 100; public Semaphore semp = new Semaphore(); public void run() { synchronized(this){// System.out.println(""

java线程锁 synchronized

//java锁是对同一个对象或者同一个对象中的方法加锁:关键是同一个 错误的加锁方式 public class MyWaitNotify {public static void main(String[] args) {MyT m1=new MyT("A");MyT m2=new MyT("B");m1.start();m2.start();} } class MyT extends Thread{String name;  public MyT(String na