CopyOnWrite系列

写时复制,读的时候直接返回

它直接保证最终一致性,不能保证强一致性,所以使用时要注意

1.CopyOnWriteArrayList

        List<Integer> tempList = Arrays.asList(new Integer [] {1,2});
        CopyOnWriteArrayList<Integer> copyList = new CopyOnWriteArrayList<>(tempList);

2.CopyOnWriteMap(模仿编写)

package com.example.demo;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * @program: demo
 * @description
 * @author: dajitui
 * @create: 2018-06-18 13:46
 **/
public class CopyOnWriteMap<K,V> implements Cloneable,Map<K,V> {
    private volatile Map<K,V> map;

    public CopyOnWriteMap(){
        map=new HashMap<K,V>(100);
    }

    @Override
    public int size() {
        return 0;
    }

    @Override
    public boolean isEmpty() {
        return false;
    }

    @Override
    public boolean containsKey(Object key) {
        return false;
    }

    @Override
    public boolean containsValue(Object value) {
        return false;
    }

    @Override
    public V get(Object key) {
       return map.get(key);
    }

    @Override
    public V put(K key, V value) {
        synchronized (this){
            Map<K,V> m=new HashMap<K,V>(map);
            V val=m.put(key,value);
            map=m;
            return val;
        }
    }

    @Override
    public V remove(Object key) {
        return null;
    }

    @Override
    public void putAll(Map<? extends K, ? extends V> m) {
        synchronized (this){
            Map<K,V> m1=new HashMap<K,V>(map);
            m1.putAll(m);
            map=m1;
        }
    }

    @Override
    public void clear() {

    }

    @Override
    public Set<K> keySet() {
        return null;
    }

    @Override
    public Collection<V> values() {
        return null;
    }

    @Override
    public Set<Entry<K, V>> entrySet() {
        return null;
    }
}

友情链接https://blog.csdn.net/linsongbin1/article/details/54581787


https://blog.csdn.net/likailonghaha/article/details/53405895


猜你喜欢

转载自blog.csdn.net/weixin_38336658/article/details/80724012