gpt4 book ai didi

java - 寻找开发互斥锁的解决方案

转载 作者:行者123 更新时间:2023-12-02 08:02:46 25 4
gpt4 key购买 nike

我正在寻找以下问题的解决方案:

我正在设计一个包含 map 的java类,该 map 由多个线程操作。这些线程将进行的操作包括:

  1. iterate:会有一个线程迭代map,迭代时会读取并更新一些entry的值
  2. put:其中一个线程将向 map 添加条目
  3. get:一个或多个线程将定期读取 map

具有挑战性的部分是,我不能将互斥锁放在所有 3 个方法上,因为 iterate 会调用 get 和 put,这会导致死锁。

请告诉我如何设计类和互斥体以使其工作。

谢谢

最佳答案

使用 synchronized 关键字时获取的互斥体是可重入的,因此如果 iterate 已经拥有互斥体,那么它可以在调用 get 和 put 时重新获取相同的互斥体。

也就是说,我会将您的映射成员字段创建为 ConcurrentHashMap。然后,您的迭代将不会出现 ConcurrentModificationException 问题(有关更多详细信息,请参阅 ConcurrentHashMap 类的 javadocs)。同样,getput 的锁定将由 ConcurrentHashMap 为您处理。

关于java - 寻找开发互斥锁的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8659366/

25 4 0