首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同步的方法有自己的锁吗?

同步的方法有自己的锁吗?
EN

Stack Overflow用户
提问于 2014-10-28 23:34:36
回答 2查看 67关注 0票数 0

假设我有

代码语言:javascript
复制
class myClass {

    synchronized methodA { };

    synchronized methodB { };
}

这是否意味着有2个隐式锁?一个给methodA,一个给B?我读到了Gayle McDowell的Cracking the Coding Interview,她说锁定发生在方法+对象的级别,而不是对象。我的印象是myClass只有一个锁,每个同步的方法都使用这个锁。有谁能解释一下吗?

EN

回答 2

Stack Overflow用户

发布于 2014-10-28 23:36:23

代码语言:javascript
复制
synchronized void methodA 
{
  //code
}

等同于

代码语言:javascript
复制
void methodA 
{
  synchronized(this)
  {
    //code
  }

}

因此,方法前面的synchronized将使用对象本身的实例作为锁。

票数 4
EN

Stack Overflow用户

发布于 2014-10-29 01:38:54

这两种方法都使用相同的锁。java中的每个对象都有自己的内部互斥锁。

代码语言:javascript
复制
synchronized void method() {}

代码语言:javascript
复制
synchronized(this) {}

使用相同的锁。

但是如果你在静态方法上尝试同步-它将使用不同的锁:

代码语言:javascript
复制
static synchronized method() { // used Class lock ! not object lock
} 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26612333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档