Die Idee dabei ist, dass, wenn Sie zu den CopyOnWriteArrayList
hinzuzufügen oder zu entfernen, die zugrunde liegenden Array grundsätzlich mit der Modifikation kopiert wird.
Bedeutet dies, es wird Anzahl von Kopien des zugrunde liegenden Array gleich auf die Anzahl der Mutationen der Sammlung
Ja, für jeden Thread, aktualisiert die ArrayList
alle anderen Threads halten Eine ältere Kopie referenziert im Wesentlichen ein anderes Array.
, wenn die Änderungen dieser einzelnen Kopien werden an zugrunde liegenden Array übertragen, so dass andere Threads sie sehen können?
Ein Array Sie zur Zeit suchen (lässt Ihre Iterator sagen) wird sich nie ändern. Wenn Sie von einem Array lesen, lesen Sie es wie zu Beginn des Lesens. Wenn sich die CopyOnWriteArrayList
durch einen anderen Thread ändert, wird das Array, das Sie gerade beobachten, nicht beeinflusst.
Um die aktuellste Version wie list.iterator();
einen neuen Lese das tun, wird gesagt, diese Sammlung eine Menge Aktualisierung wird die Leistung töten. Wenn Sie versucht haben, CopyOnWriteArrayList
zu sortieren, sehen Sie, dass die Liste eine UsupportedOperationException
(die Sortierung wird für die Sammlung N-mal gesetzt) ausgelöst wird. Sie sollten diesen Lesevorgang nur verwenden, wenn Sie mehr als 90 +% Lesevorgänge durchführen.