我正在使用Eclipse进行java开发,我想找到锁定类ClassA实例的监视器的所有同步方法/块。怎么做?
答案 0 :(得分:1)
Eclipse仅提供文本搜索。您要求的是需要某种类似的编译器来评估您同步的对象类型。
作为一种解决方法,您可以在解释syncobjects类的同步语句中添加注释。
synchronized(nobodyKnowsMyName) // sync(Rumpelstiltskin)
这将是一项努力,但你得到了你想要的东西。
答案 1 :(得分:1)
我已经解决了一个类似但更简单的问题,即“如何让Eclipse找到锁定在给定锁上的所有同步块”。
虽然这是一个微不足道的解决方案,但我发帖是因为我认为这是一个有趣的问题,并且想知道是否有更好的方法或IDE在这里帮助更多。 (这不是一个答案,但对于评论来说太长了。)
这种方法很简单:
为此目的创建一个公共Lock类, MySpecialLock ,并且不要在其上定义任何方法。
像这样使用:
MySpecialLock lock = getTheParticularInstanceInSomeDomainSpecificWay();
synchronized (lock) { ... }
现在您可以使用Eclipse的Java Search for references选项,(右键单击 MySpecialLock 鼠标快捷方式,然后在上下文菜单中选择 References-> Workspace ; Windows上的键盘快捷键为 Ctrl + Shift + G 。现在每个点击都是一个同步块,因为这个
真的没什么别的如果你的锁是一个带有其他方法的ClassA,只有部分是同步的,那么这没有用。将根据您的代码结构留给您,以确定这种方法是否值得考虑重构。