在Eclipse中,如何查找锁定特定类实例的所有java同步块/方法

时间:2014-07-10 10:28:52

标签: java eclipse

我正在使用Eclipse进行java开发,我想找到锁定类ClassA实例的监视器的所有同步方法/块。怎么做?

2 个答案:

答案 0 :(得分:1)

Eclipse仅提供文本搜索。您要求的是需要某种类似的编译器来评估您同步的对象类型。

作为一种解决方法,您可以在解释syncobjects类的同步语句中添加注释。

synchronized(nobodyKnowsMyName)  // sync(Rumpelstiltskin)

这将是一项努力,但你得到了你想要的东西。

答案 1 :(得分:1)

我已经解决了一个类似但更简单的问题,即“如何让Eclipse找到锁定在给定锁上的所有同步块”。

虽然这是一个微不足道的解决方案,但我发帖是因为我认为这是一个有趣的问题,并且想知道是否有更好的方法或IDE在这里帮助更多。 (这不是一个答案,但对于评论来说太长了。)

这种方法很简单:

  1. 为此目的创建一个公共Lock类, MySpecialLock ,并且不要在其上定义任何方法。

  2. 像这样使用:

    MySpecialLock lock = getTheParticularInstanceInSomeDomainSpecificWay();
    synchronized (lock) { ...  }
    
  3. 现在您可以使用Eclipse的Java Search for references选项,(右键单击 MySpecialLock 鼠标快捷方式,然后在上下文菜单中选择 References-> Workspace ; Windows上的键盘快捷键为 Ctrl + Shift + G 。现在每个点击都是一个同步块,因为这个

    真的没什么别的

    如果你的锁是一个带有其他方法的ClassA,只有部分是同步的,那么这没有用。将根据您的代码结构留给您,以确定这种方法是否值得考虑重构。