写时复制,读的时候直接返回
它直接保证最终一致性,不能保证强一致性,所以使用时要注意
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