繁体   English   中英

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

[英]How can I find all synchronized on the same monitor in Java with Eclipse?

使用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){
      //...
    }
}

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

  • LockClass.add
  • AnyOther.doSomethigs

要查找引用: Select your element->rt-click menu->References->workspace

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

Eclipse将无法找到对某个对象的引用。 它只能找到对某个符号的引用,例如变量,类,方法aso监视器可以是this或变量的值o - 在运行时指向同一个对象。 但是,Eclipse无法提取这样的运行时信息。

让我们直截了当地说出一些条款:

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

代码中的哪个位置引用了监视器?

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

哪个变量指向显示器?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM