gpt4 book ai didi

java - 网络应用程序 : safetly update a shared List/Map in the AppContext

转载 作者:行者123 更新时间:2023-12-04 06:51:26 25 4
gpt4 key购买 nike

我的 WebAppContext 中有列表和 map 。
大多数情况下,这些只能由多个线程读取,但有时需要更新或添加一些数据。
我想知道在不引起 ConcurrentModificationException 的情况下执行此操作的最佳方法是什么。

我认为使用 CopyOnWriteArrayList我可以在以下方面实现我想要的 - 我不必在每个读取操作上同步 - 我可以在其他线程正在读取列表时安全地更新列表。

这是最好的解决方案吗? map 呢?

最佳答案

使用 CopyOnWriteArrayList 时要小心。典型的集合(在非常广泛的范围内)是 80% 读取 19% 写入和 1% 删除。 CopyOnWriteArraylist 在这些条件下表现不佳。 CopyOnWriteArrayList 的最佳用途是读取约 90-95% 时。写太多会降低性能(该类在调用 compareTo 时会抛出 UnsupportedOperationException 因为它上的 Collections.sort 很糟糕)。

基本上,如果您进行大量读取而很少写入,则 CopyOnWriteArrayList 非常棒,但如果不是,您可以考虑 Collections.synchronizedList。如果您想确保非阻塞读取,那么显然 CopyOnWriteArrayList 适合。

ConcurrentHashMap 非常适合替代您拥有的任何 map 实现(至少未排序)。它不会在读取时阻塞,并且只在写入时阻塞特定的桶,所以速度非常快。

关于java - 网络应用程序 : safetly update a shared List/Map in the AppContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3070708/

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