gpt4 book ai didi

java - 在多线程环境中可用于存储数百万个对象的数据结构(可伸缩性和性能)?

转载 作者:行者123 更新时间:2023-12-03 13:12:34 24 4
gpt4 key购买 nike

我的需求是:我想在多线程环境中对数百万个的对象执行频繁操作,同时要考虑并发性和可伸缩性,我需要适合此要求的最佳数据结构。

例如 :

public interface CarDetails {
public CopyOnWriteArrayList<Car> getAllCars();
public Car getMostSoldCars(int carModel);
public void addNewCarDetails(Car car);
public void oldCardDetails(Car car);
}

最初,我曾考虑使用并发API( CopyOnWriteArrayList ),因为与外部同步List( 例如,Collections.synchronizedList(list object))相比,它的性能更好。

CopyOnWriteArrayList的问题:要将数百万个对象存储在内存中并对其执行请求操作会影响性能,因为无论何时发生更新,CopyOnWriteArrayList都会创建全新的List,并且对数百万个对象执行此类操作会产生性能问题。这对多个读者来说很好,但是我正在寻找大量对象的性能。

与Collections.synchronizedList(列表对象)有关的问题:从外部同步列表还有另一个问题,因为它锁定了整个对象,而这又有另一个性能问题。

任何人都可以向我建议,哪种集合API适用于此类要求(并发性,可伸缩性,数百万个对象,在频繁运行时具有更好的性能)。

提前致谢 !!!

最佳答案

ConcurrentLinkedQueue是免等待的(即无锁且线程不会饿死)并且不执行任何复制

如果要维护集合而不是列表,则可以让多个线程将对象添加到 ConcurrentLinkedQueue ,并让单个线程 poll 队列并将对象添加到未同步的 HashMap ;这可能比使用 ConcurrentHashMap 更为有效。但是,这假定您可以承受要添加的对象与集合中显示的对象之间的微小延迟。

关于java - 在多线程环境中可用于存储数百万个对象的数据结构(可伸缩性和性能)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25832079/

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