记录线程安全(Java +注释)
我试图更新使用依赖注入的应用程序,这样做时,我试图用“线程安全”注释记录每个类(需要它),以供其他编码器和错误检查器使用。
如果我有一个服务类,如下所示:
@ImplementedBy(FooImpl.class)
public interface FooSrvc {
}
这是相关的实施
class FooImpl implements FooSrvc {
}
*我是否应该使用线程安全注释来记录或注释接口和具体实现? 只是服务,因为它是公开的,只是实现?*例如对于两者:
@javax.annotation.concurrent.ThreadSafe
@org.checkthread.annotations.ThreadSafe
@ImplementedBy(FooImpl.class)
public interface FooSrvc {
}
@javax.annotation.concurrent.ThreadSafe
@org.checkthread.annotations.ThreadSafe
class FooImpl implements FooSrvc {
}
注 - 我正在使用两个不同的线程安全注释集,以使用较旧的并发错误查找程序CheckThread(其中找不到支持jsr-305注释的文档)和FindBugs。
谢谢。
那要看:
如果仅注解接口,则含义是“此接口的每个实现都保证是线程安全的。” 这是一个棘手的问题,因为要确保实施者不违反合同是很困难的。
如果仅注解实现,则明确允许接口的其他实现不是线程安全的。 从治理的角度来看,这样更加舒适,但对接口调用者来说不那么有用。
注释两者都是多余的,因为接口上的注释不能被实现上的注释覆盖(会违反多态性)。 不过,这可能是首选,因为它具有更好的工具支持。
您正在使用的单个静态分析工具可能需要您使用选项3.我不知道CheckThread足以发表评论。 然而,FindBugs线程安全检测器非常简单,它并不重要; 如果FindBugs是你的主要工具,那么我会在界面上推荐选项3加上一些Javadoc,告诉开发者线程安全注解没有被强制执行,所以他们还必须检查实现。
链接地址: http://www.djcxy.com/p/76453.html