gpt4 book ai didi

java - 如何在 Sets.newSetFromMap(map) 上执行clone()

转载 作者:行者123 更新时间:2023-12-01 14:03:10 25 4
gpt4 key购买 nike

之前的代码就像;避免 Vector 上的 ConcurrentModificationException ;任何需要迭代的地方;它在该 Vector 上的同步块(synchronized block)内执行。因此,通过使多个线程进入 BLOCKED 状态以在不同的 API 上获取该 Vector 的锁定,性能会非常差。

我决定替换VectorCollections.newSetFromMap(new ConcurrentHashMap<psConference,Boolean>());在我的项目中。

所以将Vector改为Concurrent集合后;我已经删除了所有同步块(synchronized block)。

但这里的问题是我的一些代码正在该 vector 上执行clone()。

  1. 由于我只有设置界面,如何在这里执行相同的操作?
  2. Vector clone() 是深克隆还是浅克隆?
  3. 另外请告诉我 boolean 值的重要性 ConcurrentHashMap<psConference,Boolean>

最佳答案

But the problem here is some of my code is performing clone() on that Vector.

How to do the same on here since i have only Set interface ?

您正在使用Set现在,不是Vector 。您的SetConcurrentHashMap 支持,因此并发迭代是安全的。我建议您使用复制构造函数,而不是克隆。

但请注意(来自 javadocs ):

However, iterators are designed to be used by only one thread at a time.

话虽如此,您也可以使用 CopyOnWriteArrayList ,但你必须小心,因为写入成本很高,并且 Iterator不支持元素更改操作。

Vector clone() is Deep cloning or Shallow cloning?

克隆会复制引用,因此是浅层的。

Also pls tell me the significance of Boolean at ConcurrentHashMap<psConference,Boolean>

Boolean值只是一个占位符,因为您使用的是 Map作为Set 。如果您查看 Collection 的来源类你会看到Boolean.TRUE添加元素时始终使用。实际使用的容器为SetMap#keySet() 。所以Boolean参数在这里实际上什么也不做,只是一个占位符。

关于java - 如何在 Sets.newSetFromMap(map) 上执行clone(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19180106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com