Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @guardeby(“mutex”)是使数据线程安全还是仅仅是一个文档_Java_Multithreading - Fatal编程技术网

Java @guardeby(“mutex”)是使数据线程安全还是仅仅是一个文档

Java @guardeby(“mutex”)是使数据线程安全还是仅仅是一个文档,java,multithreading,Java,Multithreading,我注意到人们使用@guardeby(“互斥”)私有映射Map=newhashmap() 这是否使映射线程安全?我怀疑。此代码如何决定使用哪种线程安全映射? 我想这只是一种文档。它是文档。静态分析程序可以检查Java类文件,其中包括@GuardedBy注释,并报告并非所有读写都由锁保护。默认情况下,@GuardedBy不会以任何特定方式处理,这很好。注释是经常记录意图的元数据 向语言中添加特定的注释处理可能会对代码的可读性和简单性产生负面影响,因此需要小心操作 在某些情况下,注释中嵌入的实际行为

我注意到人们使用@guardeby(“互斥”)私有映射Map=newhashmap() 这是否使映射线程安全?我怀疑。此代码如何决定使用哪种线程安全映射?

我想这只是一种文档。

它是文档。静态分析程序可以检查Java类文件,其中包括
@GuardedBy
注释,并报告并非所有读写都由锁保护。默认情况下,
@GuardedBy
不会以任何特定方式处理,这很好。注释是经常记录意图的元数据

向语言中添加特定的注释处理可能会对代码的可读性和简单性产生负面影响,因此需要小心操作

  • 在某些情况下,注释中嵌入的实际行为是正常的(例如,
    @Override
但是,如果您看看注释的预期用途是什么(),您可以很容易地想象一些可以利用
@GuardedBy
的方法

IIRC,FindBugs是第一个处理JCIP注释的工具,您可以很容易地想象,在一个特定的项目中,您可以实现使带注释的集合具有线程安全性的工具(考虑到一些约束,这些约束应该适用于您的项目)


我认为
@GuardedBy
的要点是心智模型,即几乎总是希望跟踪哪些资源由哪些锁保护。每当您在线程之间共享某个内容时,想象“这个共享数据应该由什么来保护”并不是一个坏习惯。

这只是一个文档,解释了将使用哪个字段来保护对
映射的访问。你在读《并发性》这本书吗?这应该在书的开头解释。另请参见我正在阅读的内容。。只是因为同一件事和某人发生了争执。正如你所看到的,我不敢相信它真的能保证线程安全。根本没有指定该机制。