当两个线程尝试修改/访问并发HashMap中的相同密钥时会发生什么?

JavaQuest

我了解了hashMap及其与hashtable的区别。像在哈希表中一样,整个对象被锁定,而在并发哈希表的情况下,只有一部分被锁定。我的问题是,当两个线程在samme时刻尝试访问与键对应的相同值时,会发生什么情况。

可以说

 Map mp = new ConcurrentHashMap(); 
 mp.put(1, "Hello");

线程1:尝试读取mp.get(1)。

线程2:尝试向其中写入/修改mp.put(1,“ Hi”)。

那么线程1读取什么值?

编辑:我的意思是ConcurrentHashMap。

彼得·劳瑞

线程1读取什么值?

它将读取两个可能的值,或者

  • null因为尚未设置该值,所以它会得到
  • 它获得值Thread 2 set。

这听起来似乎没什么大不了,但您应该注意,HashMap这样做有可能进入无限循环而永不返回,这很糟糕。

哪里ConcurrentHashMap是真正有用的是在这样的操作putIfAbsent对于在线程之间传递的工作,一个队列是更好的选择。

ConcurrentMap<Integer, BlockingQueue<String>> map = ...

线程1

String value = map.putIfAbsent(1, k -> new BlockingQueue<>()).take();

线程2

map.putIfAbsent(1, k -> new BlockingQueue<>()).offer("Hi");

在这种情况下,线程1将阻塞,直到线程2添加了一个值。注意:此值仅可用一次。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当两个并发线程尝试从CopyOnWriteArrayList中删除元素时会发生什么?爪哇

来自分类Dev

当两个线程同时调用相同的静态方法时会发生什么?

来自分类Dev

在 Swift 中,当两个线程获取并设置非线程安全属性时会发生什么?

来自分类Dev

当多个进程尝试在两个不同文件系统之间转换相同文件时会发生什么?

来自分类Dev

当两个进程写入mmaped文件的相同部分时会发生什么?

来自分类Dev

当两个对象彼此相等时会发生什么

来自分类Dev

GCD:当两个线程想要同时在主线程上执行块时会发生什么

来自分类Dev

如果两个任务尝试同时访问结构的不同部分(在c中),会发生什么情况?

来自分类Dev

如果两个任务尝试同时访问结构的不同部分(在c中),会发生什么情况?

来自分类Dev

具有相同方法名称的两个接口,当我重写时会发生什么?

来自分类Dev

在Linux内核中同时发生两个中断时会发生什么

来自分类Dev

将两个分支与子模块合并时会发生什么?

来自分类Dev

当两个应用程序监视同一iBeacon区域时会发生什么?

来自分类Dev

两个SIP客户端同时登录时会发生什么

来自分类Dev

当您强制退出两个磁盘之间的`mv`目录操作时会发生什么?

来自分类Dev

当两个应用程序监视同一iBeacon区域时会发生什么?

来自分类Dev

当您同时触摸两个按钮时会发生什么

来自分类Dev

当两个进程同时调用register()时会发生什么

来自分类Dev

rails:在 Gemfile 中指定两个 Web 服务器时会发生什么

来自分类Dev

从Java中的两个线程同步访问HashMap

来自分类Dev

如果两个流程同时修改两个事务中的数据并且在表上存在唯一约束,将会发生什么?

来自分类Dev

如果两个不同网站上的会话名称相同,会发生什么?

来自分类Dev

当两个IPv6前缀长度相同时,会发生什么?

来自分类Dev

当我有两个指针指向同一个对象时会发生什么?

来自分类Dev

当两个进程侦听同一个 Berkeley/Unix [file] 套接字时会发生什么?

来自分类Dev

当 Angular 2 的文件中有两个类,一个装饰器/一个类两个装饰器时会发生什么?

来自分类Dev

当两个脚本想同时使用LOCK_EX写入文件时会发生什么?

来自分类Dev

当我们尝试修改字符串常量时会发生什么?

来自分类Dev

当线程尝试同时调用静态和非静态同步方法时会发生什么?

Related 相关文章

  1. 1

    当两个并发线程尝试从CopyOnWriteArrayList中删除元素时会发生什么?爪哇

  2. 2

    当两个线程同时调用相同的静态方法时会发生什么?

  3. 3

    在 Swift 中,当两个线程获取并设置非线程安全属性时会发生什么?

  4. 4

    当多个进程尝试在两个不同文件系统之间转换相同文件时会发生什么?

  5. 5

    当两个进程写入mmaped文件的相同部分时会发生什么?

  6. 6

    当两个对象彼此相等时会发生什么

  7. 7

    GCD:当两个线程想要同时在主线程上执行块时会发生什么

  8. 8

    如果两个任务尝试同时访问结构的不同部分(在c中),会发生什么情况?

  9. 9

    如果两个任务尝试同时访问结构的不同部分(在c中),会发生什么情况?

  10. 10

    具有相同方法名称的两个接口,当我重写时会发生什么?

  11. 11

    在Linux内核中同时发生两个中断时会发生什么

  12. 12

    将两个分支与子模块合并时会发生什么?

  13. 13

    当两个应用程序监视同一iBeacon区域时会发生什么?

  14. 14

    两个SIP客户端同时登录时会发生什么

  15. 15

    当您强制退出两个磁盘之间的`mv`目录操作时会发生什么?

  16. 16

    当两个应用程序监视同一iBeacon区域时会发生什么?

  17. 17

    当您同时触摸两个按钮时会发生什么

  18. 18

    当两个进程同时调用register()时会发生什么

  19. 19

    rails:在 Gemfile 中指定两个 Web 服务器时会发生什么

  20. 20

    从Java中的两个线程同步访问HashMap

  21. 21

    如果两个流程同时修改两个事务中的数据并且在表上存在唯一约束,将会发生什么?

  22. 22

    如果两个不同网站上的会话名称相同,会发生什么?

  23. 23

    当两个IPv6前缀长度相同时,会发生什么?

  24. 24

    当我有两个指针指向同一个对象时会发生什么?

  25. 25

    当两个进程侦听同一个 Berkeley/Unix [file] 套接字时会发生什么?

  26. 26

    当 Angular 2 的文件中有两个类,一个装饰器/一个类两个装饰器时会发生什么?

  27. 27

    当两个脚本想同时使用LOCK_EX写入文件时会发生什么?

  28. 28

    当我们尝试修改字符串常量时会发生什么?

  29. 29

    当线程尝试同时调用静态和非静态同步方法时会发生什么?

热门标签

归档