如果一个线程对并发集合之一中的一个对象进行了突变,将提供什么保证?

用户名

如果线程一将可变对象A放入并发集合中(例如ConcurrentSkipListMap),则我理解这是线程安全的,因为如果线程2从集合中获取对象A,则可以保证它是完全可见的。

但是,如果线程一在对象A处于集合中时对其进行了突变,那么由线程二获取它是否仍提供相同的完全可见性保证?

乔恩·斯基特

但是,如果线程一在对象A处于集合中时对其进行了突变,那么由线程二获取它是否仍提供相同的完全可见性保证?

不,绝对不是。并发保证适用于集合本身。从集合中获取元素后,它是常规的引用-因此,即使在“ get”操作的末尾存在内存障碍,也仍然可能出现以下情况:

 Thread 1                   Thread 2

   get
                              get
                              mutate
   read

...并且在完成这两项get操作之后,收集就无关紧要了。

并发收集应用于:

  • 不可变类型,可以从多个线程自然使用
  • 可变但不可变的类型
  • 您在其中应用显式同步等以确保安全的类型

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

创建一个集合对象

来自分类Dev

如果没有线程阻塞信号,而一个线程位于sigwait()中,是否可以保证被阻塞的线程将接收下一个信号?

来自分类Dev

数组sort()在分配给另一个数组之后也对实际的数组列表进行了排序

来自分类Dev

众多之一:将对象合并为一个

来自分类Dev

根据第三个列表中的一个随机项,从两个列表之一中选择一个随机项

来自分类Dev

从三个表之一中选择一个值

来自分类Dev

是一个Java集合保证在一个ConcurrentModificationException的后一个有效的,可用的状态?

来自分类Dev

在dplyr中,将一组逻辑列中的任何一个为true的逻辑列进行突变

来自分类Dev

在集群环境中,如果对items.xml进行了更改,是否足以在一个节点中执行“更新正在运行的系统”并仅清除对其他节点的缓存?

来自分类Dev

范围的Excel [标准偏差]已针对另一个范围进行了过滤

来自分类Dev

范围的Excel [标准偏差]已针对另一个范围进行了过滤

来自分类Dev

当我已经为另一个函数进行了计算时,为什么不能将这些计算调用到我的构建中

来自分类Dev

按列计算其他3列之一中的一个条件

来自分类Dev

如果我在两个页面之一中,如何应用CSS样式更改?

来自分类Dev

Groovy中的并发异常,即使对另一个LinkedHashMap进行了更改

来自分类Dev

Groovy中的并发异常,即使对另一个LinkedHashMap进行了更改

来自分类Dev

Jsonschema可以验证列表之一中的至少一个元素

来自分类Dev

如果您知道集合中只有一个对象,该如何从集合中获取一个对象?

来自分类Dev

如果没有线程阻塞信号,并且一个线程位于sigwait()中,是否可以保证被阻塞的线程将接收下一个信号?

来自分类Dev

如何维护几个只能在一个对象中存在一个对象的集合?

来自分类Dev

如果我创建一个原子变量,线程之间是否对原子变量进行了所有操作?

来自分类Dev

是否有一个测试将“未定义的行为”显示为错误,或者仅通过检查源代码进行了测试?

来自分类Dev

仅在抽象类的许多子类之一中添加一个额外的方法

来自分类Dev

使用循环搜索2个目录并找到重复的文件,然后从2个目录之一中删除其中一个

来自分类Dev

Mongodb将一个集合复制到另一个集合中

来自分类Dev

为什么多线程有一个Lock对象?

来自分类Dev

如果一个线程在 java 中重新分配一个变量会发生什么?

来自分类Dev

如何知道用户是否通过 firebase 的第一个请求进行了身份验证

来自分类Dev

如果我在同一个程序中打开一个 FIFO 进行读写会发生什么?

Related 相关文章

  1. 1

    创建一个集合对象

  2. 2

    如果没有线程阻塞信号,而一个线程位于sigwait()中,是否可以保证被阻塞的线程将接收下一个信号?

  3. 3

    数组sort()在分配给另一个数组之后也对实际的数组列表进行了排序

  4. 4

    众多之一:将对象合并为一个

  5. 5

    根据第三个列表中的一个随机项,从两个列表之一中选择一个随机项

  6. 6

    从三个表之一中选择一个值

  7. 7

    是一个Java集合保证在一个ConcurrentModificationException的后一个有效的,可用的状态?

  8. 8

    在dplyr中,将一组逻辑列中的任何一个为true的逻辑列进行突变

  9. 9

    在集群环境中,如果对items.xml进行了更改,是否足以在一个节点中执行“更新正在运行的系统”并仅清除对其他节点的缓存?

  10. 10

    范围的Excel [标准偏差]已针对另一个范围进行了过滤

  11. 11

    范围的Excel [标准偏差]已针对另一个范围进行了过滤

  12. 12

    当我已经为另一个函数进行了计算时,为什么不能将这些计算调用到我的构建中

  13. 13

    按列计算其他3列之一中的一个条件

  14. 14

    如果我在两个页面之一中,如何应用CSS样式更改?

  15. 15

    Groovy中的并发异常,即使对另一个LinkedHashMap进行了更改

  16. 16

    Groovy中的并发异常,即使对另一个LinkedHashMap进行了更改

  17. 17

    Jsonschema可以验证列表之一中的至少一个元素

  18. 18

    如果您知道集合中只有一个对象,该如何从集合中获取一个对象?

  19. 19

    如果没有线程阻塞信号,并且一个线程位于sigwait()中,是否可以保证被阻塞的线程将接收下一个信号?

  20. 20

    如何维护几个只能在一个对象中存在一个对象的集合?

  21. 21

    如果我创建一个原子变量,线程之间是否对原子变量进行了所有操作?

  22. 22

    是否有一个测试将“未定义的行为”显示为错误,或者仅通过检查源代码进行了测试?

  23. 23

    仅在抽象类的许多子类之一中添加一个额外的方法

  24. 24

    使用循环搜索2个目录并找到重复的文件,然后从2个目录之一中删除其中一个

  25. 25

    Mongodb将一个集合复制到另一个集合中

  26. 26

    为什么多线程有一个Lock对象?

  27. 27

    如果一个线程在 java 中重新分配一个变量会发生什么?

  28. 28

    如何知道用户是否通过 firebase 的第一个请求进行了身份验证

  29. 29

    如果我在同一个程序中打开一个 FIFO 进行读写会发生什么?

热门标签

归档