Java CopyOnWriteArray
来源:互联网 发布:通达oa办公软件 编辑:程序博客网 时间:2024/06/03 13:49
package concurrent;import java.util.Arrays;import java.util.concurrent.CopyOnWriteArrayList;import java.util.concurrent.locks.ReentrantLock;/** @author: wjf* @version: 2016年3月30日 上午9:51:17*/public class TestCopyOnWrite { public static void main(String[] args){ /*具体 add 的代码,修改时复制,添加 修改元素时,先新建一个 array,修改完之后,将原来的array 指向新的array, *这样在添加元素的时候,旧的array一眼可以向外部提供 并发读的 服务,这是一种读写分离的思想,但是就是读的可能不是最新的数据 *在实时性系统中并不适用,适用于读多写少的场景,比如黑名单机制,大多数情况下是读取黑名单,修改一般较少, * 可以使用类似思想实现任何的 copyOnWrite 容器 * * public boolean add(E e) { final ReentrantLock lock = this.lock; lock.lock(); try { Object[] elements = getArray(); int len = elements.length; Object[] newElements = Arrays.copyOf(elements, len + 1); newElements[len] = e; setArray(newElements); return true; } finally { lock.unlock(); } } */ CopyOnWriteArrayList<Integer> list=new CopyOnWriteArrayList<Integer>(); }}
自己实现 copyOnWriteMap
class CopyOnWriteMap<K,V> implements Map<K,V> ,Cloneable{ private volatile Map<K,V> internalMap; public CopyOnWriteMap(){ this.internalMap=new HashMap<K,V>(); } @Override public V get(Object key) { // TODO Auto-generated method stub return internalMap.get(key); } @Override public V put(K key, V value) { // TODO Auto-generated method stub synchronized(this){ HashMap<K,V> newMap=new HashMap<K,V>(internalMap); newMap.put(key, value); this.internalMap=newMap; } return value; } @Override public V remove(Object key) { // TODO Auto-generated method stub synchronized(this){ HashMap<K,V> newMap=new HashMap<K,V>(internalMap); V value=newMap.remove(key); this.internalMap=newMap; return value; } } @Override public void putAll(Map<? extends K, ? extends V> m) { // TODO Auto-generated method stub synchronized(this){ HashMap<K,V> newMap=new HashMap<K,V>(internalMap); newMap.putAll(m); this.internalMap=newMap; } } }
0 0
- Java CopyOnWriteArray
- java
- JAVA
- JAVA
- JAVA
- java
- Java
- Java
- JAVA:
- java
- java
- java
- java
- Java
- java
- java
- java
- JAVA?
- 嵌入式系统移植三步曲 孟明明
- H5+MUI+Node.js+Socket.io群组即时聊天+发送图片+图片压缩
- 嵌入式系统移植三步曲 王延龙
- 嵌入式系统移植三部曲 王晓峰
- 嵌入式系统移植三部曲 李炎朔
- Java CopyOnWriteArray
- 解析 this.initialize.apply(this, arguments)
- Android 为应用程序创建桌面快捷方式
- ser and client.c 王晓峰
- 深入理解JVM(一)-Java运行时数据区域
- EXCEL中如何保持图片大小不随单元格变化而变化
- 李炎朔 编程分析
- 嵌入式系统移植三步曲 赵晓晓
- 嵌入式系统移植三步曲 孟明明