我使用Map在内存中存储客户的购物篮项目。我的地图有以下签名Map<Integer, Basket> customerBaskets = new ConcurrentHashMap<>();
每个Basket
类都有一个定义为Collection<Item> items = new ArrayList<>()
的项目列表。
在应用程序启动期间,将所有客户加载到地图中,并将一个空篮子分配给他们。现在我想以线程安全的方式将商品添加到客户的购物篮中。由于ConcurrentHashMap
读取没有锁定,我可以根据customerId获得Basket并自由地将项目添加到items
列表,这并不能保证我的线程安全。如何确保对该列表的写入的线程安全,以及读取具有最新的写入值?请建议。
谢谢。
您需要使用类似ReentrantLock的方法来同步ArrayList上的读写操作,或者为这个底层数组使用CopyOnWriteArrayList实现。