Java @guardeby(“mutex”)是使数据线程安全还是仅仅是一个文档
我注意到人们使用@guardeby(“互斥”)私有映射Map=newhashmap() 这是否使映射线程安全?我怀疑。此代码如何决定使用哪种线程安全映射?Java @guardeby(“mutex”)是使数据线程安全还是仅仅是一个文档,java,multithreading,Java,Multithreading,我注意到人们使用@guardeby(“互斥”)私有映射Map=newhashmap() 这是否使映射线程安全?我怀疑。此代码如何决定使用哪种线程安全映射? 我想这只是一种文档。它是文档。静态分析程序可以检查Java类文件,其中包括@GuardedBy注释,并报告并非所有读写都由锁保护。默认情况下,@GuardedBy不会以任何特定方式处理,这很好。注释是经常记录意图的元数据 向语言中添加特定的注释处理可能会对代码的可读性和简单性产生负面影响,因此需要小心操作 在某些情况下,注释中嵌入的实际行为
我想这只是一种文档。它是文档。静态分析程序可以检查Java类文件,其中包括
@GuardedBy
注释,并报告并非所有读写都由锁保护。默认情况下,@GuardedBy
不会以任何特定方式处理,这很好。注释是经常记录意图的元数据
向语言中添加特定的注释处理可能会对代码的可读性和简单性产生负面影响,因此需要小心操作
- 在某些情况下,注释中嵌入的实际行为是正常的(例如,
)@Override
@GuardedBy
的方法
IIRC,FindBugs是第一个处理JCIP注释的工具,您可以很容易地想象,在一个特定的项目中,您可以实现使带注释的集合具有线程安全性的工具(考虑到一些约束,这些约束应该适用于您的项目)
我认为
@GuardedBy
的要点是心智模型,即几乎总是希望跟踪哪些资源由哪些锁保护。每当您在线程之间共享某个内容时,想象“这个共享数据应该由什么来保护”并不是一个坏习惯。这只是一个文档,解释了将使用哪个字段来保护对映射的访问。你在读《并发性》这本书吗?这应该在书的开头解释。另请参见我正在阅读的内容。。只是因为同一件事和某人发生了争执。正如你所看到的,我不敢相信它真的能保证线程安全。根本没有指定该机制。