如何在Java和Eclipse中的同一个监视器上找到所有同步的对象?

如何在Java和Eclipse中的同一个监视器上找到所有同步的对象?,java,eclipse,ide,reference,synchronized,Java,Eclipse,Ide,Reference,Synchronized,使用Eclipse可以找到方法、成员或类的所有引用。是否也可以找到对同步监视器的所有引用 如果Eclipse不能做到这一点,那么另一个JavaIDE是否也能做到这一点 我的问题是监视器对象包含许多引用。搜索所有引用将返回许多结果。我将只查看与此对象同步的位置 编辑:我添加了一个示例我的意思是: public class LockClass{ public synchronized void add(Object any){ } } public class AnyOther{ pr

使用Eclipse可以找到方法、成员或类的所有引用。是否也可以找到对同步监视器的所有引用

如果Eclipse不能做到这一点,那么另一个JavaIDE是否也能做到这一点

我的问题是监视器对象包含许多引用。搜索所有引用将返回许多结果。我将只查看与此对象同步的位置

编辑:我添加了一个示例我的意思是:

public class LockClass{
  public synchronized void add(Object any){
  }
}

public class AnyOther{
  private LockClass lock;

  public AnyOther(LockClass lock){
    this.lock = lock;
  }

  public void doSomethings(){
    synchronized(lock){
      //...
    }
}
现在我想搜索所有使用LockClass作为监视器的同步。这是一个静态分析。在我的样本中,我想找到:

  • LockClass.add
  • 还有其他的吗

要查找引用:
选择您的元素->rt单击菜单->引用->工作区


不可能在同一个对象上找到所有可能的同步块,因为引用所指向的实际对象将取决于运行时。

Eclipse将无法找到对某个对象的引用。它只能找到对某个符号的引用,例如变量、类、方法a.s.o。监视器可以是
this
或变量的值
o
——两者在运行时都指向同一对象。但是,Eclipse没有办法提取这样的运行时信息。

让我们直接了解一些术语:

  • 同步块的监视器实际上是对象上的监视器
  • 对同步监视器的引用不明确:是否希望代码中引用此监视器的所有位置或指向监视器的所有字段/局部变量
监视器在代码中的何处引用?

Suraj已经描述了如何做到这一点:
Search>References>Workspace…
。您还可以将这些引用过滤为仅读访问、写访问、实现者等。这些引用是通过静态代码分析找到的,因此无需运行应用程序。但是,这不会自动检测将对象引用指定给字段,然后将字段指定给另一个变量的情况。这仅检测对该对象的特定引用的引用

哪些变量指向监视器?

这将处理多个字段/局部变量引用对象的情况。为此,应用程序必须正在运行。您需要将断点放在监视器可见的适当位置(最简单的方法是在使用所讨论的监视器的同步块周围)。变量视图将显示当前范围内可用的所有变量。通过在变量视图中选择对对象的引用,打开关联菜单并选择
所有引用…
,可以获取对对象的所有引用。这将显示引用对象的所有字段/局部变量