gpt4 book ai didi

Java 使列表线程的副本安全吗?

转载 作者:行者123 更新时间:2023-11-29 04:28:51 25 4
gpt4 key购买 nike

我有多个线程在 Java 应用程序中运行,它们都需要访问同一个列表。然而,实际上只有一个线程需要插入/删除/更改列表,而其他线程只需要访问它。

在其他线程中,我想复制一份列表供我在需要阅读时使用,但是有什么方法可以线程安全的方式做到这一点吗?如果我有一种方法可以逐个元素地复制列表并且列表发生变化,那会把事情搞砸不是吗?

编辑:

列表不会经常被删除,那么如果我正常复制它并捕获异常是否可以?如果列表在副本的中间增长而我错过了它,它不会真正对功能产生影响

最佳答案

您可以根据您的目的使用CopyOnWriteArrayList

CopyOnWriteArrayList 是 Java 5 Concurrency API 中引入的并发 Collection 类,以及它在 Java 中的流行表亲 ConcurrentHashMap

As name suggest CopyOnWriteArrayList creates copy of underlying ArrayList with every mutation operation e.g. add or set. Normally CopyOnWriteArrayList is very expensive because it involves costly Array copy with every write operation but its very efficient if you have a List where Iteration outnumber mutation e.g. you mostly need to iterate the ArrayList and don't modify it too often.

有了这个集合,您不应该每次都创建一个新实例。你应该只有一个这样的对象,它会起作用。

关于Java 使列表线程的副本安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44728150/

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