2017-09-07 37 views
2

メソッドdefをsynchronizedブロックに入れて、これをConcurrentHashMapで解決できるかどうか疑問に思っていますか?更新を失わずにショッピングカートを更新する

/** 
    Implement thread-safe updating of user's cart. 
    Exit criteria is carts is updated atomically, product is appended 
    in the end of cart. 
**/ 

void addToCart(ConcurrentHashMap<Integer, List<Integer>> carts, Integer userId, Integer productId) 

答えて

0

私は、次の解決策は、うまくいくかもしれない考えていますが、私は、任意の提案を歓迎します。私はスレッドセーフリストを使用する必要はないと思う。

static void addToCart2(ConcurrentHashMap<Integer, List<Integer>> carts, Integer userId, Integer productId) { 
    carts.putIfAbsent(userId, new ArrayList<>()); 
    carts.computeIfPresent(userId, (userKey, listValue) -> { 
    listValue.add(productId); 
    return listValue; 
}); 

}

関連する問題