De l'CopyOnWriteArrayList.java, la méthode add est la suivante:Pourquoi CopyOnWriteArrayList copys lors de l'écriture?
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();
}
}
Il est pas difficile de comprendre que ajouter opération devrait bloquer, ce qui me confond est qu'il copie les anciennes données à nouveau tableau et d'abandonner le précédent . quant à lui obtenir la méthode est la suivante:
public E get(int index) {
return (E)(getArray()[index]);
}
sans verrou dans la méthode get. Je trouve quelques explications, certains disent que copier dans un nouveau tableau peut éviter d'ajouter et de faire fonctionner la méthode sur le même tableau. Mon problème est pourquoi deux threads ne peuvent pas lire et écrire en même temps?
http://stackoverflow.com/questions/17853112/in-what-situations-is-the-copyonwritearraylist-suitable/17853225#17853225 –