copyOnWriteArray 并发包下的不安全(数组)集合
Posted 爱不死
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了copyOnWriteArray 并发包下的不安全(数组)集合相关的知识,希望对你有一定的参考价值。
copyOnWriteArray 记录一下
package java.util.concurrent;//你没有看错,是这个包
private transient volatile Object[] array;//初始化数组 public CopyOnWriteArrayList() {//构造函数,初始化 setArray(new Object[0]); } final void setArray(Object[] a) { array = a; } 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(); } } final Object[] getArray() { return array; }
public E get(int index) {//获取单个数组对象 return get(getArray(), index); }
private E get(Object[] a, int index) { return (E) a[index]; }
add的时候枷锁,先复制,后赋值;get的时候并没有加锁,(导致多线程的时候可能get不到最近的值)
以上是关于copyOnWriteArray 并发包下的不安全(数组)集合的主要内容,如果未能解决你的问题,请参考以下文章
Java中juc并发包下的Condition接口与ReentrantLock对象锁实现线程通信