首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >synchronized(this)和synchronized(其他对象)有什么区别?

synchronized(this)和synchronized(其他对象)有什么区别?
EN

Stack Overflow用户
提问于 2016-06-14 15:12:08
回答 1查看 231关注 0票数 0
代码语言:javascript
复制
Public Class A
{
  private Object memberlockObject = new Object();

  public doStuffapproach1(){

      synchronized(this){
               // Do something;
      }
  }

 public doStuffapproach2(){

      synchronized(memberlockObject){
               // Do something;
      }
 }

 public doStuffapproach3(Object parameterLockObject){

      synchronized(parameterLockObject){
               // Do something;
      }
 }

}

在上面的代码中,doStuffapproach1、doStuffapproach2、doStuffapproach3方法是否实现了相同类型的块同步。如果不是,它们之间有何不同。应该在什么情况下使用它们?

附言:我理解方法级同步和在(this)上同步整个方法体一样好。

EN

回答 1

Stack Overflow用户

发布于 2016-06-14 15:14:36

使用synchronized关键字时,需要定义一个用作监视器的对象。

synchronized(this)使用当前对象作为监视器

synchronized(otherObject)使用另一个对象作为监视器

如果您需要在不同类中的同一对象上进行同步,那么至少其中一个需要在this之外的其他对象上进行同步。

请注意,隐式地将一个方法定义为synchronized将在this上同步(如果该方法不是static)。

doStuffapproach1方法在此基础上进行同步,因此对同一对象上方法的任何调用都将同步。

doStuffapproach2的工作方式与doStuffapproach1完全相同,因为您可以锁定在当前对象中具有唯一实例的对象。

doStuffapproach3的工作方式有所不同,因为您传递的是监视器,并且依赖于您作为参数传递的内容。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37805284

复制
相关文章

相似问题

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