Copiar na gravação
O contêiner conpyOnWrite é um contêiner de cópia na gravação.Quando adicionar elementos a um contêiner, em vez de adicionar diretamente ao contêiner atual Object [], o contêiner atual Object [] é copiado primeiro e um novo contêiner Object [] newElements é copiado e, em seguida, copiado Adicione elementos ao novo contêiner newElements. Depois de adicionar os elementos, fale sobre a referência do meta contêiner ao novo contêiner setArray (newElements) .A vantagem disso é que o contêiner copyOnWrite pode ser lido simultaneamente sem bloquear, porque O contêiner atual não adicionará nenhum elemento, portanto, o copyOnWrite também é uma ideia separada de leitura e gravação, leitura e gravação de contêineres diferentes.
1 public boolean add (E e) { 2 final ReentrantLock lock = this .lock; 3 lock.lock (); 4 experimente { 5 Object [] elements = getArray (); 6 int len = elements.length; 7 Object [] newElements = Arrays.copyOf (elementos, len + 1 ); 8 newElements [len] = e; 9 setArray (newElements); 10 return true ; 11 } finalmente { 12 bloquear desbloquear(); 13 } 14 }