gpt4 book ai didi

java - 在多线程环境中使用什么; vector 或数组列表

转载 作者:搜寻专家 更新时间:2023-11-01 04:00:59 26 4
gpt4 key购买 nike

我有这种情况:

具有 cca​​ 200 个并发请求(线程)的 Web 应用程序需要将某些内容记录到本地文件系统。我有一个类,所有线程都向其发出调用,该类在内部将消息存储到一个数组(Vector 或 ArrayList),然后依次将其写入文件系统。

想法是尽快从线程的调用中返回,这样线程就可以尽快完成它的工作,线程想要记录的日志可以稍后写入文件系统,这不是那么重要。

因此,该类依次从该列表中删除第一个元素并将其写入文件系统,而实时有 10 或 20 个线程在该列表的末尾附加新日志。

我想使用 ArrayList 因为它不是同步的,因此线程的调用会持续更少,问题是:

我有死锁/数据丢失的风险吗?使用 Vector 是不是更好,因为它是线程安全的?使用 Vector 是不是比较慢?

最佳答案

实际上 ArrayListVector 在这里都是非常糟糕的选择,不是因为同步(你肯定需要),而是因为删除第一个元素是 O(n ).

最适合您的数据结构是 ConcurrentLinkedQueue :它提供线程安全(不使用同步)和 O(1) 添加和删除。

关于java - 在多线程环境中使用什么; vector 或数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3547429/

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