如何在Java中使用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作为监视器的同步搜索。 这是一个静态分析。 在我的示例中,我希望找到:
让我们直接看一些术语:
代码中监视器被引用的地方在哪里?
Suraj已经描述了如何做到这一点: Search > References > Workspace...
您也可以将这些引用过滤为只读访问,写访问,实现器等。这些引用可以通过静态代码分析找到,因此不需要运行该应用程序。 然而,这不会自动检测到对对象的引用分配给一个字段的情况,然后将该字段分配给另一个变量。 这只能检测对该对象的此特定引用的引用。
显示器指向哪些变量?
这将处理几个字段/局部变量引用对象的情况。 为此,应用程序必须正在运行。 你需要把断点放在适当的地方,监视器是可见的(最简单的方法是在同步块周围的某个地方使用监视器)。 变量视图将显示当前范围内可用的所有变量。 您可以通过在Variables视图中选择对象的引用来获取对对象的All References...
,并带上下文菜单并选择All References...
这将显示引用该对象的所有字段/局部变量。
要找到参考: Select your element->rt-click menu->References->workspace
无法在同一个对象上找到所有可能的同步块,因为引用指向的实际对象将取决于运行时。
Eclipse将无法找到某个对象的引用。 它只能找到对某个符号的引用,例如一个变量,一个类,一个方法aso监视器可以是this
变量的值或者是一个变量o
的值 - 它们都在运行时指向同一个对象。 但是,Eclipse无法提取这样的运行时信息。
上一篇: How can I find all synchronized on the same monitor in Java with Eclipse?
下一篇: How do I setup configuration when I use command line to build C#/.NET?