如何在Eclipse中使用Java在同一台显示器上找到所有同步?

Hor*_*ux7 7 java eclipse ide reference synchronized

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

如果Eclipse无法实现这一点,那么可以使用另一个Java IDE吗?

我的问题是监视器对象有很多引用.搜索所有引用将返回许多结果.我只会看到与此对象同步的位置.

编辑:我添加一个样本我的意思:

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){
      //...
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我希望所有使用LockClass作为监视器的同步搜索.这是一个静态分析.在我的样本中,我想找到:

  • LockClass.add
  • AnyOther.doSomethigs

Dan*_*hev 1

让我们弄清楚一些术语:

  • 同步块的监视器实际上是对象上的监视器
  • 对同步监视器的引用不明确:您想要代码中引用该监视器的所有位置还是指向该监视器的所有字段/局部变量?

代码中哪里引用了监视器?

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

哪些变量指向监视器?

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