2016-11-16 2 views
0

Angenommen, ich habe eine ArrayList<Foo>. Diese Liste wird sehr häufig geändert. Sogar die Werte der Elemente in der Liste haben Werte, die sich ständig ändern. Alle Änderungen an dieser Liste werden vom Hauptthread ausgeführt.Java Deep Clone Liste von Objekten in separaten Thread atomisch

Wie würde ich gehen Klonen der Liste (tiefe Ebene, Elemente sollten auch geklont werden) in einem separaten Thread in einer Weise, dass es nicht verzögert den Haupt-Thread (oder zumindest nicht viel), und die kopiert Liste enthält eine Momentaufnahme (ich glaube, der Begriff ist atomar) aller Foo-Objekte, deren Werte identisch mit der ursprünglichen Liste sind (wiederum in einem Schnappschuss der Zeit).

Vielen Dank im Voraus. Ich weiß, dass die Lösung mit Synchronisierung zu tun hat, aber ich bin in der Lage, alle oben genannten Kriterien zu erfüllen.

Antwort

1

Leider gibt es dazu keine einfache Antwort. Wenn die Änderungen, die an der Liste vorgenommen werden, bereits threadsicher sind, können Sie eine Sperre für die Liste (oder was auch immer Sie für die Synchronisierung verwenden) verwenden, Ihre Kopie erstellen und die Sperre aufheben. Sie müssen sicherstellen, dass alle Änderungen an den Elementen die gleiche Sperre verwenden.

Alternativ können Sie unveränderliche Konstrukte verwenden (aber Sie müssen dies nicht nur für die Liste verwenden, sondern auch für den Listeninhalt), dann müssen Sie nie sperren und können nur eine Kopie der Liste abrufen in Ihrer Freizeit.

Es gibt Nachteile und Risiken für beide Ansätze. Wenn Sie eine gute Ressource wollen, empfehle ich dringend Java Concurrency in Practice.

+0

Danke für schnelle Antwort! Obwohl ich nach einem Beispiel suchte, um mich auf den richtigen Weg zu bringen, keine Verbindung zu einem Buch. – olta8

+0

CopyOnWriteArrayList scheint sehr gut zu funktionieren. – olta8

+0

CopyOnWriteArrayList ist sicherlich nützlich, aber denken Sie daran, vorsichtig mit dem Ändern der Elemente selbst (d. H. Die Foos in CopyOnWriteArrayList ); es wird dich nicht vor Querfadenproblemen dort retten ... –

Verwandte Themen