Java synchronized的问题

ningbohezhijun 2014-09-10 05:37:37
假设有如下两个父类和其子类

public class Widget {
public class synchronized void doSomething() {

}
}

public class LoggingWidget extends Widget {
public synchronized void doSomething() {
System.out.println("calling doSomething");
super.doSomething();
}
}

我的问题是synchronized是锁的this对象,那么Widget锁的也是LoggingWidget的对象吗?如果是,那么LoggingWidget类应该是有两个doSomething方法了,至少编译器能够识别出两个。如果不是,那怎么解释呢?
...全文
209 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ningbohezhijun 2014-09-11
  • 打赏
  • 举报
回复
其实我想问的概念是关于重入锁的问题,5楼成功的帮助我解决了这个问题。非常感谢!
skgary 2014-09-11
  • 打赏
  • 举报
回复
锁是锁在对像实例上,并不是在你的类上面。 父类,子类两个同步方法,锁的都是只一个对像实例。
引用 楼主 ningbohezhijun 的回复:
假设有如下两个父类和其子类

public class Widget {
    public class synchronized void doSomething() {
        
    }
}

public class LoggingWidget extends Widget {
    public synchronized void doSomething() {
        System.out.println("calling doSomething");
        super.doSomething();
    }
}
我的问题是synchronized是锁的this对象,那么Widget锁的也是LoggingWidget的对象吗?如果是,那么LoggingWidget类应该是有两个doSomething方法了,至少编译器能够识别出两个。如果不是,那怎么解释呢?
wu244534279 2014-09-11
  • 打赏
  • 举报
回复
的确两个都锁住了LoggingWidget的this对象,你可以在两个方法中加入sysout(this)打印出两个this的地址,看看是不是一样的, 说LoggingWidget有两个doST方法也可以,但父类那个被屏蔽了,要通过super关键词才能找出来。
Star-小东 2014-09-11
  • 打赏
  • 举报
回复
public class synchronized void doSomething() {} 提主 这函数定义用了啥高深的关键字
wtc860104 2014-09-11
  • 打赏
  • 举报
回复
一个类的代码写错了吧,方法名用class声明了 建议楼主好好看一下继承
ningbohezhijun 2014-09-11
  • 打赏
  • 举报
回复
引用 1 楼 kk_124 的回复:
synchronized  class 锁的是 该类的Class对象
你这回答我知道,但是和我的问题无关啊
普凡 2014-09-10
  • 打赏
  • 举报
回复
synchronized  class 锁的是 该类的Class对象

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧