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