ConcurrentHashMap中Object中包含的修改列表



我使用Map在内存中存储客户的购物篮项目。我的地图有以下签名Map<Integer, Basket> customerBaskets = new ConcurrentHashMap<>();

每个Basket类都有一个定义为Collection<Item> items = new ArrayList<>()的项目列表。

在应用程序启动期间,将所有客户加载到地图中,并将一个空篮子分配给他们。现在我想以线程安全的方式将商品添加到客户的购物篮中。由于ConcurrentHashMap读取没有锁定,我可以根据customerId获得Basket并自由地将项目添加到items列表,这并不能保证我的线程安全。如何确保对该列表的写入的线程安全,以及读取具有最新的写入值?请建议。

谢谢。

您需要使用类似ReentrantLock的方法来同步ArrayList上的读写操作,或者为这个底层数组使用CopyOnWriteArrayList实现。